Qual a diferença entre WHERE e HAVING no SQL?

A principal diferença entre WHERE e HAVING no SQL é que WHERE filtra registros individuais antes do agrupamento, enquanto HAVING filtra grupos após o agrupamento.

Qual a diferença entre WHERE e HAVING no SQL?

Os comandos WHERE e HAVING são usados para aplicar filtros em consultas SQL, mas funcionam de maneira diferente.

1. WHERE: Filtrando antes do agrupamento

O WHERE é utilizado para filtrar registros individuais antes do agrupamento. Ele é aplicado diretamente sobre os dados brutos da tabela.

SELECT * FROM pedidos 
WHERE valor > 100;

Essa consulta retorna apenas os pedidos cujo valor seja maior que 100, sem necessidade de agrupamento.

2. HAVING: Filtrando depois do agrupamento

O HAVING é utilizado para filtrar registros após um GROUP BY, permitindo que sejam aplicados filtros sobre dados agregados.

SELECT cliente_id, SUM(valor) AS total_gasto 
FROM pedidos 
GROUP BY cliente_id 
HAVING SUM(valor) > 500;

Aqui, a consulta soma os valores de compras por cliente e filtra apenas aqueles que gastaram mais de 500.

Diferença principal entre WHERE e HAVING

Comando Funciona antes ou depois do GROUP BY? Quando usar?
WHERE Antes do GROUP BY Para filtrar registros individuais
HAVING Depois do GROUP BY Para filtrar dados agregados

3. Usando WHERE e HAVING juntos

Podemos utilizar WHERE e HAVING na mesma consulta:

SELECT cliente_id, SUM(valor) AS total_gasto 
FROM pedidos 
WHERE status = 'confirmado'  -- Filtrando pedidos antes do agrupamento
GROUP BY cliente_id 
HAVING SUM(valor) > 500;  -- Filtrando clientes que gastaram mais de 500

Aqui:

  • WHERE remove pedidos cancelados antes da agregação.
  • HAVING remove clientes com gasto total inferior a 500.

Compreender a diferença entre WHERE e HAVING no SQL é essencial para criar consultas eficientes e bem estruturadas. Em um sistema de vendas, WHERE pode ser usado para excluir pedidos cancelados, enquanto HAVING ajuda a filtrar clientes que compraram acima de um determinado valor. O uso correto dessas cláusulas melhora a organização e performance das consultas, tornando a análise de dados mais eficaz.

Algumas aplicações:

  • Filtrar pedidos confirmados antes de calcular o faturamento
  • Remover produtos descontinuados antes de calcular a média de preços
  • Selecionar clientes que gastaram acima de um valor total
  • Filtrar departamentos que possuem um número mínimo de funcionários
  • Gerar relatórios de vendas eliminando categorias específicas

Dicas para quem está começando

  • Use WHERE para filtrar registros individuais antes do agrupamento
  • Use HAVING para filtrar dados agregados após o GROUP BY
  • Se precisar dos dois filtros, aplique WHERE antes e HAVING depois
  • Evite usar HAVING quando um simples WHERE for suficiente
  • Teste sua consulta sem HAVING primeiro para entender o impacto do agrupamento

Contribuições de Fernando Albuquerque

Compartilhe este tutorial: Qual a diferença entre WHERE e HAVING no SQL?

Compartilhe este tutorial

Continue aprendendo:

Como usar HAVING para filtrar agrupamentos no SQL?

O HAVING no SQL permite filtrar registros após o agrupamento feito pelo GROUP BY, sendo ideal para filtrar dados agregados.

Tutorial anterior

Como contar quantos registros existem em cada grupo?

Podemos contar registros dentro de cada grupo no SQL utilizando COUNT() junto com GROUP BY para segmentar os dados.

Próximo tutorial