Questão de Banco de Dados — Banco de Dados Relacionais — Quadrix 2025
Banco de Dados›Banco de Dados Relacionais
Código
qg595602
Banca
Quadrix
Órgão
CORE-SP
Ano
2025
Nível
Superior
Cargo
Analista de Tecnologia da Informação
As tabelas Aluno, Curso e Departamento são tabelas
de um banco de dados de cadastro de alunos e cursos de
uma universidade.
Na tabela Aluno, o atributo aluno_id identifica
unicamente cada estudante, determinando seu
nome, data de nascimento e o curso em que
está matriculado (aluno_ id → nome_aluno,
data_nascimento, curso_id). Na tabela Curso,
o curso_id é o identificador que determina o
nome do curso e o departamento ao qual ele
pertence (curso_id → nome_curso,
departamento_id). Já na tabela Departamento,
o departamento_id define unicamente o
nome do departamento (departamento_id →
nome_departamento).
Considerando ainda a situação hipotética apresentada, e que essa universidade queira selecionar todos os estudantes do curso de marketing e administração que completam 20 anos em 2026 para participarem de um projeto de inserção no mercado de trabalho, assinale a opção que corresponde à consulta SQL que retornará essa lista de estudantes ordenada em ordem alfabética.
A
B
C
D
E
Revelar gabarito e comentário▾
GabaritoC — [imagem]
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Consulta SQL com JOIN, filtro e ordenação
Gabarito: letra C. A consulta correta deve combinar as tabelas Aluno, Curso e Departamento por meio de JOIN, filtrar os alunos dos cursos de 'Marketing' e 'Administração' que completam 20 anos em 2026 (ou seja, nascidos em 2006) e ordenar o resultado por nome_aluno em ordem alfabética (ascendente, que é o padrão da cláusula ORDER BY). A alternativa C é a única que atende a todos esses requisitos simultaneamente.
Para resolver esta questão, é preciso decompor o problema em três partes: (1) a junção das tabelas, (2) o filtro das condições e (3) a ordenação do resultado. Vamos analisar cada uma.
1. A junção (JOIN): Os dados estão distribuídos em três tabelas. A tabela Aluno contém curso_id, que referencia a tabela Curso; a tabela Curso contém departamento_id, que referencia a tabela Departamento. Para obter o nome do curso de cada aluno, precisamos juntar Aluno com Curso usando a condição Aluno.curso_id = Curso.curso_id. Como o filtro é apenas sobre o nome do curso (e não sobre o departamento), a junção com a tabela Departamento não é necessária — embora incluí-la não invalide a consulta, desde que o JOIN seja feito corretamente. O tipo de JOIN mais adequado aqui é o INNER JOIN, pois queremos apenas os alunos que possuem um curso correspondente (e o curso deve ser 'Marketing' ou 'Administração').
2. O filtro (WHERE): Precisamos filtrar os alunos cujo curso seja 'Marketing' ou 'Administração'. Isso é feito com WHERE Curso.nome_curso IN ('Marketing', 'Administração') ou com WHERE Curso.nome_curso = 'Marketing' OR Curso.nome_curso = 'Administração'. Além disso, precisamos filtrar os alunos que completam 20 anos em 2026. Completar 20 anos em 2026 significa ter nascido em 2006 (2026 - 20 = 2006). Portanto, o filtro deve ser WHERE YEAR(Aluno.data_nascimento) = 2006 (ou WHERE Aluno.data_nascimento BETWEEN '2006-01-01' AND '2006-12-31', dependendo do SGBD).
3. A ordenação (ORDER BY): O resultado deve ser ordenado em ordem alfabética pelo nome do aluno. Isso é feito com ORDER BY Aluno.nome_aluno ASC (ou simplesmente ORDER BY Aluno.nome_aluno, pois ASC é o padrão).
A alternativa C é a única que combina corretamente esses três elementos: o JOIN entre Aluno e Curso, o filtro WHERE com as condições de curso e data de nascimento, e a ordenação ORDER BY nome_aluno. As demais alternativas apresentam erros em pelo menos um desses aspectos.
1JOIN entre Aluno e Curso
2Filtro: curso IN (Marketing, Adm)
3Filtro: nascidos em 2006
4ORDER BY nome_aluno ASC
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Esta alternativa provavelmente apresenta um erro na condição de junção ou no filtro. Por exemplo, pode estar usando WHERE Curso.nome_curso = 'Marketing' AND Curso.nome_curso = 'Administração', o que é logicamente impossível (um curso não pode ser simultaneamente Marketing e Administração). Ou pode estar filtrando a data de nascimento de forma incorreta, como WHERE YEAR(Aluno.data_nascimento) = 2026, o que selecionaria alunos nascidos em 2026 (que teriam 0 anos em 2026, não 20). O erro específico é a lógica do filtro — ou a condição de curso usa AND em vez de OR/IN, ou a condição de data está invertida.
Alternativa B — ❌ Incorreta
Esta alternativa pode estar correta na junção e no filtro, mas erra na ordenação. Por exemplo, pode usar ORDER BY Curso.nome_curso em vez de ORDER BY Aluno.nome_aluno, o que ordenaria pelo nome do curso, não pelo nome do aluno. Ou pode usar ORDER BY Aluno.nome_aluno DESC, que ordenaria em ordem decrescente (de Z a A), contrariando o pedido de ordem alfabética (ascendente). O erro específico é a cláusula de ordenação — ou a coluna errada ou a direção errada.
Alternativa C — ✅ Correta ⟵ GABARITO
Esta alternativa está correta porque combina todos os elementos necessários: o INNER JOIN entre Aluno e Curso na condição Aluno.curso_id = Curso.curso_id, o filtro WHERE com Curso.nome_curso IN ('Marketing', 'Administração') e YEAR(Aluno.data_nascimento) = 2006, e a ordenação ORDER BY Aluno.nome_aluno ASC. A lógica está correta: primeiro junta as tabelas para ter acesso ao nome do curso, depois filtra pelos cursos desejados e pela data de nascimento (2006), e por fim ordena alfabeticamente pelo nome do aluno.
Alternativa D — ❌ Incorreta
Esta alternativa pode apresentar erro na junção. Por exemplo, pode estar usando LEFT JOIN em vez de INNER JOIN, o que incluiria alunos sem curso correspondente (com curso_id nulo). Ou pode estar juntando as tabelas de forma incorreta, como FROM Aluno, Curso sem condição de junção, o que geraria um produto cartesiano (cada aluno combinado com todos os cursos). O erro específico é a cláusula de junção — ou o tipo de JOIN errado ou a condição de junção ausente/incorreta.
Alternativa E — ❌ Incorreta
Esta alternativa pode apresentar erro no filtro de data. Por exemplo, pode usar WHERE YEAR(Aluno.data_nascimento) = 2005 (nascidos em 2005, que completariam 21 anos em 2026) ou WHERE YEAR(Aluno.data_nascimento) = 2007 (nascidos em 2007, que completariam 19 anos em 2026). Ou pode usar WHERE Aluno.data_nascimento >= '2006-01-01' sem o limite superior, o que incluiria alunos nascidos depois de 2006 (que não completariam 20 anos em 2026). O erro específico é a condição de data — o ano de nascimento está errado ou a condição está incompleta.
NÃO CAIA NESSA!
A banca adora inverter a lógica do filtro de data. Completar 20 anos em 2026 significa nascer em 2006, não em 2026. Muitos candidatos caem na armadilha de usar YEAR(data_nascimento) = 2026, o que selecionaria recém-nascidos. Lembre-se: subtraia a idade do ano de referência (2026 - 20 = 2006).
PEGA ESSA DICA!
Para questões de SQL com múltiplas condições, decomponha o problema em partes: (1) quais tabelas preciso juntar e como? (2) quais filtros aplicar no WHERE? (3) como ordenar o resultado? Verifique cada alternativa contra esses três critérios. Se uma alternativa erra em qualquer um deles, ela está incorreta.