Pular para o conteúdo principal

Questão de Banco de Dados — Banco de Dados Relacionais — CESPE / CEBRASPE 2026

Banco de DadosBanco 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.
  1. ASELECT e.nomeFROM EMPREENDIMENTO eJOIN LICENCA l ON e.id_emp = l.id_empWHERE l.status = 'ATIVA'GROUP BY e.nomeHAVING COUNT(*) > 1;
  2. BSELECT nomeFROM EMPREENDIMENTOWHERE COUNT(status) > 1;
  3. CSELECT e.nomeFROM EMPREENDIMENTO eJOIN LICENCA lWHERE l.status = 'ATIVA';
  4. DSELECT e.nomeFROM EMPREENDIMENTO eGROUP BY e.nomeWHERE COUNT(*) > 1;
  5. ESELECT e.nomeFROM EMPREENDIMENTO eWHERE EXISTS LICENCA;
Revelar gabarito e comentário

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.

Gabarito: letra A.

Link permanente: /questoes/ce225562