Sobes.tech
Junior

Qual é a diferença entre as construções WHERE e HAVING em SQL?

sobes.tech IA

Resposta da IA

WHERE filtra as linhas antes de agrupar (GROUP BY), influenciando quais as linhas que participarão nas funções de agregação. HAVING filtra os grupos depois de agrupar, com base nos resultados das funções de agregação.

Característica WHERE HAVING
Aplicação A linhas individuais A grupos de linhas
Momento de processamento Antes do GROUP BY Depois do GROUP BY
Uso Com campos da tabela, mas sem funções de agregação Com resultados de funções de agregação ou campos de GROUP BY

Exemplo de uso do WHERE:

SELECT nome_produto, preço
FROM produtos
WHERE category_id = 1; -- Filtra linhas **antes** de agrupar (se fosse necessário)

Exemplo de uso do HAVING:

SELECT category_id, COUNT(*) AS total_produtos
FROM produtos
GROUP BY category_id
HAVING COUNT(*) > 5; -- Filtra grupos **depois** de contar o quantidade total de produtos

Exemplo de uso conjunto:

SELECT category_id, AVG(preço) AS preço_médio
FROM produtos
WHERE stock > 0 -- Filtra apenas produtos em stock **antes** de agrupar
GROUP BY category_id
HAVING AVG(preço) < 100; -- Filtra grupos com preço médio menor que 100 **depois** de agrupar e calcular a média