Questão FC546285
CREATE TABLE empresas (id_empresa INT PRIMARY KEY, nome_empresa VARCHAR(100), cnpj VARCHAR(18)); CREATE TABLE auditorias (id_auditoria INT PRIMARY KEY, id_empresa INT, data_auditor
Linguagem SQL
CEBRASPE (CESPE) · 2025
CREATE TABLE empresas (id_empresa INT PRIMARY KEY, nome_empresa VARCHAR(100), cnpj VARCHAR(18));
CREATE TABLE auditorias (id_auditoria INT PRIMARY KEY, id_empresa INT, data_auditoria DATE, FOREIGN KEY (id_empresa) REFERENCES empresas(id_empresa));
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.
- SELECT 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
- 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
- SELECT 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
- SELECT 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
- SELECT 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
Mostrar resposta e comentário
Gabarito
B
Comentário do professor
A consulta usa LEFT JOIN com a restrição de data na cláusula ON, o que faz com que todas as empresas permaneçam na junção mesmo quando não há auditorias em 2025 (os campos de auditoria ficam NULL nesses casos). A condição BETWEEN '2025-01-01' AND '2025-12-31' limita as linhas de auditoria consideradas ao ano de 2025.
Em seguida agrupa por empresa (GROUP BY 1, 2) e usa HAVING COUNT(a.id_auditoria) \( \le 1 \). Como COUNT ignora valores NULL, empresas sem auditoria retornam 0 e as com uma única auditoria retornam 1, atendendo à condição. Se a restrição de data estivesse em WHERE, as empresas sem auditoria em 2025 seriam filtradas, o que seria incorreto.
Portanto, a consulta retorna corretamente id e nome das empresas com nenhuma ou até uma auditoria em 2025.
Conteúdo do catálogo FC Concursos · Atualizado em