Cláusulas WHERE e HAVING no SQL
Gabarito: letra A. A cláusula WHERE filtra registros individuais (linhas) antes da agregação, enquanto a cláusula HAVING filtra grupos já agregados, após a aplicação do GROUP BY. Essa é a distinção fundamental entre as duas, conforme o padrão SQL.
A tabela abaixo resume as diferenças:
Característica | WHERE | HAVING |
|---|
Momento da filtragem | Antes da agregação (linhas individuais) | Após a agregação (grupos) |
Uso típico | Condições sobre colunas individuais | Condições sobre funções agregadas (ex.: COUNT, SUM) |
Exige GROUP BY? | Não | Sim, geralmente |
Alternativa A — ✅ Correta ⟵ GABARITO
A alternativa descreve corretamente a diferença: WHERE filtra registros com base em critérios especificados (linhas), e HAVING filtra grupos agregados com base em critérios. É exatamente o papel de cada cláusula em uma consulta SQL.
Alternativa B — ❌ Incorreta
WHERE não é usada para ordenar registros; a ordenação é feita pela cláusula ORDER BY. HAVING, por sua vez, filtra grupos, não registros.
Alternativa C — ❌ Incorreta
WHERE e HAVING não são intercambiáveis. Cada uma tem seu momento de aplicação e seus próprios critérios de uso. WHERE age antes da agregação; HAVING, após.
Alternativa D — ❌ Incorreta
WHERE não agrupa registros; quem agrupa é a cláusula GROUP BY. HAVING filtra grupos (após GROUP BY), não registros individuais.
Alternativa E — ❌ Incorreta
WHERE não agrupa; HAVING não ordena. A ordenação é feita por ORDER BY, e o agrupamento por GROUP BY.
A compreensão correta do fluxo de execução de uma consulta SQL (FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY) é essencial para não confundir as cláusulas. WHERE atua no momento de filtragem de linhas, HAVING no momento de filtragem de grupos.
Gabarito: letra A.