Pular para o conteúdo principal

Questão de Banco de Dados — Banco de Dados Relacionais — FUNDATEC 2026

Banco de DadosBanco 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.
  1. 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.
  2. 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.
  3. CCOUNT(atributo) e COUNT(*) são equivalentes: ambas contam todas as linhas do grupo, inclusive aquelas em que o atributo vale NULL.
  4. 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.
  5. 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.

Gabarito: letra B.

Link permanente: /questoes/qg685515