Qual alternativa abaixo melhor identifica a principal diferença entre a cláusula WHERE e a cláusula HAVING?
Questão
Qual alternativa abaixo melhor identifica a principal diferença entre a cláusula WHERE e a cláusula HAVING?
Alternativas
A) A cláusula WHERE tem por finalidade filtrar linhas simples e a cláusula HAVING filtra grupo de linhas. Em uma consulta SQL não é permitido você utilizar essas 2 cláusulas na mesma instrução.
B) A cláusula WHERE tem por finalidade filtrar linhas simples e a cláusula HAVING também filtra linhas. Em uma consulta SQL é permitido você utilizar essas 2 cláusulas na mesma instrução.
C) A cláusula WHERE tem por finalidade filtrar grupo de linhas e a cláusula HAVING filtra linhas simples.
D) A cláusula WHERE tem por finalidade filtrar linhas simples e a cláusula HAVING filtra grupo de linhas. Em uma consulta SQL é permitido você utilizar essas 2 cláusulas na mesma instrução.
E) A cláusula WHERE tem por finalidade filtrar grupo de linhas e a cláusula HAVING filtra linhas simples. Em uma consulta SQL não é permitido você utilizar essas 2 cláusulas na mesma instrução.
Explicação
Em SQL, a diferença central é o momento e o alvo do filtro:
-
WHERE filtra linhas (registros) antes do agrupamento (antes do
GROUP BY).- Ou seja, atua sobre dados “linha a linha”.
-
HAVING filtra grupos depois do agrupamento (depois do
GROUP BY).- Por isso, é a cláusula usada para impor condições sobre resultados agregados (ex.:
COUNT(*) > 10,SUM(vendas) > 1000).
- Por isso, é a cláusula usada para impor condições sobre resultados agregados (ex.:
-
É permitido usar WHERE e HAVING na mesma consulta, por exemplo:
WHERErestringe as linhas que entram no agrupamento;HAVINGrestringe quais grupos (já agregados) permanecem no resultado.
Analisando as alternativas:
- A erra ao dizer que não é permitido usar as duas na mesma instrução.
- B erra ao dizer que HAVING “também filtra linhas” (ele filtra grupos/resultado agregado).
- C e E invertem os papéis de WHERE e HAVING.
- D descreve corretamente: WHERE filtra linhas e HAVING filtra grupos, e é permitido usar ambas.
Alternativa correta: (D).