Questão de Banco de Dados — Banco de Dados Relacionais — CESPE / CEBRASPE 2026
Banco de Dados›Banco de Dados Relacionais
Código
ce225562
Banca
CESPE / CEBRASPE
Órgão
IPAAM
Ano
2026
Nível
Superior
Cargo
Analista Ambiental – Especialidade: Análise de Sistemas
O IPAAM mantém um banco de dados SQL para acompanhar empreendimentos e suas licenças ambientais. Esse banco de dados contém as tabelas EMPREENDIMENTO (id_emp, nome) e LICENCA (id_licenca, id_emp, status). O IPAAM deseja listar os nomes dos empreendimentos que possuem mais de uma licença com status 'ATIVA', conforme o padrão SQL ANSI.Considerando a situação hipotética apresentada, assinale a opção que apresenta o comando SQL correto para atender à necessidade descrita.
ASELECT e.nomeFROM EMPREENDIMENTO eJOIN LICENCA l ON e.id_emp = l.id_empWHERE l.status = 'ATIVA'GROUP BY e.nomeHAVING COUNT(*) > 1;
GabaritoA — SELECT e.nome
FROM EMPREENDIMENTO e
JOIN LICENCA l ON e.id_emp = l.id_emp
WHERE l.status = 'ATIVA'
GROUP BY e.nome
HAVING COUNT(*) > 1;
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”.
SQL – Comando SELECT com agregação e filtro em grupo
Gabarito: letra A. A consulta correta usa JOIN entre as tabelas EMPREENDIMENTO e LICENCA, filtra as licenças com status 'ATIVA' no WHERE, agrupa por nome do empreendimento (GROUP BY) e aplica a condição de mais de uma licença no HAVING COUNT(*) > 1. Essa é a estrutura padrão SQL ANSI para filtrar grupos após agregação.
O problema pede empreendimentos com mais de uma licença ativa. Isso exige:
Combinar as duas tabelas (JOIN pela chave estrangeira id_emp);
Filtrar apenas licenças ativas (WHERE l.status = 'ATIVA');
Agrupar por empreendimento (GROUP BY e.nome);
Manter apenas os grupos com contagem superior a 1 (HAVING COUNT(*) > 1).
A cláusula HAVING é a única maneira de aplicar condições sobre o resultado de funções de agregação (COUNT, SUM, AVG, etc.). O WHERE filtra linhas antes da agregação; o HAVING filtra grupos depois da agregação.
Alternativa A — ✅ Correta ⟵ GABARITO
Sintaxe completa e lógica correta: JOIN, WHERE filtra as ativas, GROUP BY agrupa, HAVING COUNT(*) > 1 seleciona apenas os que têm mais de uma. Atende exatamente ao requisito.
Alternativa B — ❌ Incorreta
Falta JOIN (a consulta não combina as tabelas) e usa WHERE COUNT(status) > 1, o que é inválido: funções de agregação não podem aparecer no WHERE; devem ficar no HAVING. Além disso, não filtra pelo status 'ATIVA'.
Alternativa C — ❌ Incorreta
Não tem GROUP BY nem HAVING, e o JOIN está incompleto (falta a condição de junção ON). A consulta retornaria um produto cartesiano, sem agrupar nem contar. Não atende ao objetivo.
Alternativa D — ❌ Incorreta
Tenta usar WHERE COUNT(*) > 1, o que é proibido (agregação no WHERE). Além disso, não faz JOIN com a tabela LICENCA, impossibilitando o acesso ao status.
Alternativa E — ❌ Incorreta
A sintaxe WHERE EXISTS LICENCA é incorreta: EXISTS exige uma subconsulta. Mesmo que corrigida, não haveria agrupamento nem contagem, e não filtra status 'ATIVA'.
PEGA ESSA DICA!
Na prova, sempre lembre: o WHERE filta linhas; o HAVING filtra grupos. Funções de agregação só aparecem no SELECT, HAVING ou ORDER BY. Se a condição envolver COUNT, SUM, AVG etc., ela vai no HAVING. Pratique com exemplos de “encontre X que tenham mais de Y” – são clássicos.