A partir das tabelas precedentes, referentes a empresas em que foram realizadas auditorias, assinale a opção em que a consulta SQL apresentada retorna corretamente a lista de empresas que foram objeto de nenhuma ou de apenas uma auditoria no ano de 2025.
ASELECT e.id_empresa, e.nome_empresa FROM empresas e LEFT JOIN auditorias a ON e.id_empresa = a.id_empresa WHERE a.data_auditoria >= '2025-01-01' AND a.data_auditoria <= '2025-12-31' GROUP BY e.id_empresa, e.nome_empresa HAVING COUNT(*) <= 1
BSELECT e.id_empresa, e.nome_empresa FROM empresas e LEFT JOIN auditorias a ON e.id_empresa = a.id_empresa AND a.data_auditoria BETWEEN '2025-01-01' AND '2025-12-31' GROUP BY 1, 2 HAVING COUNT(a.id_auditoria) <= 1
CSELECT e.id_empresa, e.nome_empresa FROM empresas e INNER JOIN auditorias a ON e.id_empresa = a.id_empresa AND a.data_auditoria BETWEEN '2025-01-01' AND '2025-12-31' GROUP BY e.id_empresa, e.nome_empresa HAVING COUNT(*) <= 1
DSELECT e.id_empresa, e.nome_empresa FROM empresas e LEFT JOIN auditorias a ON e.id_empresa = a.id_empresa GROUP BY e.id_empresa, e.nome_empresa HAVING COUNT(*) <= 1
ESELECT e.id_empresa, e.nome_empresa FROM empresas e LEFT JOIN auditorias a ON e.id_empresa = a.id_empresa WHERE a.data_auditoria BETWEEN '2025-01-01' AND '2025-12-31' GROUP BY e.id_empresa, e.nome_empresa HAVING COUNT(*) <= 1
Revelar gabarito e comentário▾
GabaritoB — SELECT e.id_empresa, e.nome_empresa
FROM empresas e LEFT JOIN auditorias a
ON e.id_empresa = a.id_empresa
AND a.data_auditoria BETWEEN '2025-01-01' AND
'2025-12-31'
GROUP BY 1, 2
HAVING COUNT(a.id_auditoria) <= 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 – LEFT JOIN, filtro no ON e HAVING
Gabarito: letra B. A consulta correta usa LEFT JOIN com o filtro de data na condição do JOIN (cláusula ON), e não no WHERE, para que empresas sem auditoria em 2025 (com NULL em a.data_auditoria) não sejam descartadas; em seguida, GROUP BY e HAVING COUNT(a.id_auditoria) <= 1 contam apenas as auditorias de 2025 de cada empresa. O erro central das demais alternativas está em filtrar no WHERE, o que transforma o LEFT JOIN em um INNER JOIN e elimina as empresas sem auditoria no período.
O comando pede a lista de empresas que tiveram nenhuma ou apenas uma auditoria no ano de 2025. Isso exige duas coisas: (1) preservar as empresas que não têm nenhuma auditoria em 2025 — o que só o LEFT JOIN faz, mantendo a linha da empresa com valores NULL à direita; (2) contar apenas as auditorias de 2025 — o que exige que o filtro de data seja aplicado antes da contagem, sem descartar as linhas NULL.
A diferença crucial está em onde colocar o filtro de data. Se ele vai no WHERE, o LEFT JOIN perde o sentido: o WHERE é avaliado depois do JOIN e remove as linhas em que a.data_auditoria é NULL, pois NULL >= '2025-01-01' não é verdadeiro. O resultado é equivalente a um INNER JOIN — empresas sem auditoria em 2025 somem. Se o filtro vai no ON, ele é aplicado durante o JOIN: as linhas de empresas que não encontram correspondência em auditorias com data em 2025 permanecem, com a.id_auditoria e a.data_auditoria iguais a NULL.
Depois, GROUP BY e.id_empresa, e.nome_empresa agrupa por empresa. No HAVING, COUNT(a.id_auditoria) conta apenas os valores não nulos de a.id_auditoria — ou seja, conta somente as auditorias de 2025 que existem para cada empresa. Uma empresa sem auditoria em 2025 tem COUNT(a.id_auditoria) = 0, e uma empresa com uma auditoria tem COUNT = 1; ambas satisfazem <= 1. Já COUNT(*) contaria também a linha da empresa com NULL (contaria 1 para empresa sem auditoria), o que, embora ainda satisfaça <= 1, é menos preciso e pode mascarar erros em outras situações.
A pegadinha da banca é justamente a posição do filtro: as alternativas A, C e E usam WHERE com a data, o que elimina as empresas sem auditoria em 2025; a alternativa D não filtra a data, contando todas as auditorias de qualquer ano. A alternativa B é a única que combina LEFT JOIN com filtro no ON e COUNT sobre a coluna da tabela à direita.
NÃO CAIA NESSA!
A banca explora a diferença entre filtrar no WHERE e filtrar no ON de um LEFT JOIN. Filtrar no WHERE descarta as linhas com NULL (vira INNER JOIN); filtrar no ON preserva as empresas sem correspondência. É exatamente isso que separa a alternativa B das demais.
1LEFT JOIN preserva empresas sem auditoria
2Filtro no ON (não no WHERE)
3GROUP BY empresa
4COUNT(a.id_auditoria) <= 1
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
O filtro de data está no WHERE, o que elimina as empresas sem auditoria em 2025 (linhas com a.data_auditoria = NULL). O LEFT JOIN se comporta como INNER JOIN, e a consulta retorna apenas empresas com pelo menos uma auditoria no período — nunca as que tiveram nenhuma. Além disso, COUNT(*) conta também a linha da empresa com NULL se ela sobrevivesse, mas aqui ela nem chega ao GROUP BY.
Alternativa B — ✅ Correta ⟵ GABARITO
O filtro de data está no ON, preservando as empresas sem auditoria em 2025 (com NULL em a.id_auditoria). O GROUP BY 1, 2 agrupa pelas duas primeiras colunas do SELECT (e.id_empresa, e.nome_empresa). O HAVING COUNT(a.id_auditoria) <= 1 conta apenas as auditorias de 2025 de cada empresa: empresas sem auditoria têm contagem 0, empresas com uma auditoria têm contagem 1 — ambas passam no filtro. É a única alternativa que atende integralmente ao enunciado.
Alternativa C — ❌ Incorreta
Usa INNER JOIN, que descarta automaticamente as empresas sem nenhuma auditoria em 2025. Mesmo que o filtro de data esteja no ON, o INNER JOIN só retorna linhas com correspondência — empresas com zero auditorias no período ficam de fora. O HAVING COUNT(*) <= 1 até limitaria a uma auditoria, mas a lista nunca incluiria as empresas com nenhuma auditoria.
Alternativa D — ❌ Incorreta
Não há filtro de data algum. O LEFT JOIN traz todas as auditorias de qualquer ano, e o HAVING COUNT(*) <= 1 seleciona empresas com no máximo uma auditoria no total (não em 2025). Uma empresa com uma auditoria em 2024 e nenhuma em 2025 seria incluída, e uma empresa com duas auditorias em 2025 seria excluída — contrariando o enunciado.
Alternativa E — ❌ Incorreta
O filtro de data está no WHERE, o que descarta as empresas sem auditoria em 2025 (mesmo problema da alternativa A). O LEFT JOIN perde o efeito e a consulta retorna apenas empresas com pelo menos uma auditoria no período. O HAVING COUNT(*) <= 1 limita a uma auditoria, mas a lista não inclui as empresas com nenhuma.
Gabarito: letra B — a única que preserva empresas sem auditoria em 2025 (filtro no ON) e conta apenas as auditorias do período (COUNT(a.id_auditoria)).