Questão de Banco de Dados — Banco de Dados Relacionais — FUNDATEC 2026
Banco de Dados›Banco de Dados Relacionais
Código
qg685515
Banca
FUNDATEC
Órgão
IFC-SC
Ano
2026
Nível
Superior
Cargo
Professor EBTT - Computação
Sobre consultas em SQL padrão (ANSI/ISO) com GROUP BY, HAVING e funções de agregação, assinale a alternativa correta.
AA cláusula WHERE filtra grupos após o GROUP BY, enquanto a cláusula HAVING filtra linhas individuais antes da formação dos grupos.
BA cláusula HAVING é aplicada aos grupos após sua formação e pode usar funções de agregação. Além disso, COUNT(*) conta todas as linhas do grupo, enquanto COUNT(atributo) desconsidera valores NULL desse atributo.
CCOUNT(atributo) e COUNT(*) são equivalentes: ambas contam todas as linhas do grupo, inclusive aquelas em que o atributo vale NULL.
DEm uma consulta com GROUP BY, qualquer atributo presente na lista SELECT pode aparecer fora de função agregadora mesmo sem constar no GROUP BY, desde que pertença à tabela agrupada.
EFunções de agregação podem ser usadas livremente na cláusula WHERE, desde que a consulta também contenha GROUP BY.
Revelar gabarito e comentário▾
GabaritoB — A cláusula HAVING é aplicada aos grupos após sua formação e pode usar funções de agregação. Além disso, COUNT(*) conta todas as linhas do grupo, enquanto COUNT(atributo) desconsidera valores NULL desse atributo.
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”.
Consultas SQL com GROUP BY, HAVING e funções de agregação
Gabarito: alternativa B. A cláusula HAVING é aplicada após a formação dos grupos e pode usar funções de agregação, enquanto COUNT(*) conta todas as linhas de um grupo e COUNT(atributo) ignora valores NULL. Essa é a descrição correta do padrão SQL ANSI/ISO.
A questão testa o conhecimento sobre a ordem de execução e as restrições das cláusulas SELECT, WHERE, GROUP BY e HAVING, além do comportamento das funções de agregação, especialmente COUNT. É essencial lembrar que WHERE filtra linhas antes da agregação, HAVING filtra grupos após a agregação, e que COUNT(*) e COUNT(coluna) diferem quanto ao tratamento de NULLs.
Cláusula / Função
Aplicação / Momento
Pode usar funções de agregação?
Contagem de NULLs
WHERE
Filtra linhas individuais antes do GROUP BY
❌ Não
—
HAVING
Filtra grupos após o GROUP BY
✅ Sim
—
COUNT(*)
Conta todas as linhas do grupo
—
✅ Inclui NULLs
COUNT(atributo)
Conta linhas do grupo com valor não nulo no atributo
—
❌ Ignora NULLs
Alternativa A — ❌ Incorreta
Afirma que WHERE filtra grupos após o GROUP BY e HAVING filtra linhas individuais antes da formação dos grupos. Isso é o inverso do correto. No padrão SQL, WHERE é aplicada às linhas individuais antes da operação de GROUP BY, enquanto HAVING é aplicada aos grupos já formados (após GROUP BY). Portanto, a alternativa troca os papéis das duas cláusulas.
Alternativa B — ✅ Correta ⟵ GABARITO
A afirmação está correta em dois aspectos: (1) HAVING é aplicada aos grupos após sua formação e pode fazer uso de funções de agregação (como AVG, SUM, COUNT); (2) COUNT(*) conta todas as linhas do grupo, incluindo aquelas com valores NULL em qualquer coluna, enquanto COUNT(atributo) conta apenas as linhas em que o valor do atributo especificado não é NULL. Essa diferença é fundamental no SQL.
Alternativa C — ❌ Incorreta
Afirma que COUNT(atributo) e COUNT() são equivalentes e que ambos contam todas as linhas, inclusive com NULL. Isso é falso: COUNT() realmente conta todas as linhas do grupo, independentemente de NULLs, mas COUNT(atributo) desconsidera as linhas em que o atributo é NULL. Portanto, os resultados podem ser diferentes se houver valores nulos na coluna.
Alternativa D — ❌ Incorreta
Diz que qualquer atributo na lista SELECT pode aparecer fora de função agregadora mesmo sem constar no GROUP BY, desde que pertença à tabela agrupada. Isso viola a regra SQL de que toda coluna no SELECT que não é argumento de função de agregação deve estar na cláusula GROUP BY (exceto em casos de dependência funcional, que não é a regra geral e não é mencionada). A afirmação é muito permissiva e incorreta.
Alternativa E — ❌ Incorreta
Afirma que funções de agregação podem ser usadas livremente na cláusula WHERE, desde que a consulta também contenha GROUP BY. Isso é proibido pelo padrão SQL: WHERE é avaliada antes da agregação, e funções como SUM, AVG, COUNT não são permitidas diretamente nela (a menos que estejam em uma subconsulta). O correto seria usar HAVING para filtrar com base em resultados agregados.
NÃO CAIA NESSA!
A banca inverteu os papéis de WHERE e HAVING na alternativa A. Cuidado: WHERE age antes do GROUP BY (linhas), HAVING age depois (grupos). Além disso, a diferença entre COUNT(*) e COUNT(coluna) é clássica: o primeiro conta todos os registros, o segundo ignora NULLs. Lembre-se de que funções de agregação não podem aparecer em WHERE, apenas em HAVING ou na lista SELECT.