Diferença Entre WHERE e HAVING no SQL

Entenda a diferença entre WHERE e HAVING no SQL! Saiba quando e como usar cada comando para filtrar dados e otimizar suas consultas.

No SQL, o WHERE filtra as linhas individuais antes do agrupamento, agindo sobre os dados brutos; o HAVING filtra depois do GROUP BY, agindo sobre os resultados agregados. Por isso condições com COUNT, SUM ou AVG só funcionam no HAVING. Use WHERE para os dados originais e HAVING para os grupos já resumidos.

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

O que você aprende neste vídeo

Resposta rápida: A aula ensina a diferença prática entre WHERE e HAVING no SQL, do filtro na tabela bruta até o filtro sobre o resultado agrupado. Você aprende a usar WHERE antes do GROUP BY, aplicar HAVING sobre a tabela já agrupada, filtrar por contagem e conferir os dois resultados numa tabela de clientes.

Neste vídeo (7 min):

  • 1:00 - Comparação entre um SELECT * simples e uma consulta com GROUP BY na tabela de clientes
  • 2:00 - Resultado do agrupamento por escolaridade: 21 pós-graduação, 46 parcial, 27 ensino médio e 6 graduação
  • 3:00 - WHERE filtrando o gênero masculino antes do agrupamento e o efeito nas contagens por escolaridade
  • 4:00 - HAVING agindo sobre a tabela já agrupada, e não sobre as linhas originais da consulta
  • 5:00 - Filtro HAVING com contagem maior ou igual a 25, que deixa só parcial e ensino médio
  • 6:00 - Regra final: WHERE antes do GROUP BY e HAVING depois do agrupamento

Trechos do vídeo:

  • O WHERE filtra as linhas antes do agrupamento; o HAVING filtra o resultado depois que o GROUP BY já rodou
  • Condições sobre funções de agregação, como COUNT, SUM e AVG, só funcionam no HAVING
  • Filtrar o gênero masculino antes do GROUP BY muda as contagens de 21, 46, 27 e 6 para 9, 25, 11 e 3
 

Diferença Entre WHERE e HAVING no SQL

Você já conhece os comandos WHERE e HAVING no SQL? Sabe como eles funcionam e qual é a diferença entre eles?

Esses dois comandos SQL são fundamentais para filtrar consultas em bancos de dados, principalmente quando lidamos com agrupamentos.

Saber quando e como utilizar cada um desses filtros é essencial para realizar consultas e análises de forma correta, já que ambos são usados para restringir o conjunto de resultados.

No entanto, cada um deve ser aplicado em um momento específico do processo de consulta.

Exemplo prático com SELECT e GROUP BY

Antes de aplicarmos WHERE e HAVING, vamos realizar duas consultas para visualizar os dados da nossa base.

Primeiro, selecionamos todos os dados da tabela para visualizá-la de forma completa.

 
SQL
SELECT * FROM clientes;
 
Visualizando os daods
 

Na segunda consulta, utilizaremos o GROUP BY para agrupar os clientes por escolaridade, mostrando quantos clientes existem em cada categoria educacional.

 
SQL
SELECT Escolaridade, COUNT(*) FROM clientes
GROUP BY Escolaridade;
 
Visualizando os dados após o GROUP BY
 

Agora que já conhecemos os nossos dados, podemos partir para a aplicação prática dos comandos WHERE e HAVING.

Quando trabalhamos com tabelas, é comum querermos filtrar os dados retornados pela consulta SQL, e é aí que entram os comandos WHERE e HAVING.

O que é o WHERE no SQL?

O comando WHERE é utilizado para filtrar registros antes de qualquer tipo de agrupamento ser realizado.

Ou seja, ele age diretamente sobre os dados brutos, antes que funções de agregação, como GROUP BY ou SUM(), sejam aplicadas.

Esse filtro reduz o conjunto de dados com base em condições definidas pelo usuário, antes que qualquer cálculo ou agrupamento seja realizado.

Por exemplo, podemos considerar apenas clientes do gênero masculino antes de realizar o agrupamento por escolaridade.

 
SQL
SELECT Escolaridade, COUNT(*) FROM clientes
WHERE Genero = 'M'
GROUP BY Escolaridade;
 
WHERE no SQL
 

Neste exemplo, o comando WHERE está filtrando todos os clientes do gênero masculino antes de qualquer outro tipo de processamento. Primeiro, o filtro por gênero é aplicado, para, em seguida, ocorrer o agrupamento por escolaridade.

O que é o HAVING no SQL?

Por outro lado, o HAVING é usado para filtrar os resultados após o agrupamento dos dados. Isso significa que ele age sobre os grupos gerados por um comando GROUP BY, permitindo refinar os dados agrupados com base em condições agregadas.

Por exemplo, podemos visualizar apenas escolaridades com uma contagem maior ou igual a 25.

 
SQL
SELECT Escolaridade, COUNT(*) FROM clientes
GROUP BY Escolaridade
HAVING COUNT(*) >= 25;
 
HAVING no SQL
 

Nesse caso, o comando HAVING filtra os resultados dos grupos de clientes que têm mais de 25 ocorrências em cada nível de escolaridade. Ele é aplicado depois que os grupos são criados, o que permite filtrar diretamente os resultados agregados.

Ou seja, primeiro as informações são agrupadas por escolaridade e, em seguida, filtradas com base na contagem obtida.

Principal Diferença entre WHERE e HAVING

A principal diferença entre WHERE e HAVING está no momento em que o filtro é aplicado. O WHERE age antes do agrupamento e lida com dados individuais. Já o HAVING age após o agrupamento e lida com dados agregados.

Quando usar WHERE ou HAVING?

Utilize o WHERE quando precisar filtrar os dados brutos antes de realizar qualquer cálculo ou agrupamento.

Já o HAVING deve ser usado quando for necessário filtrar grupos de dados já agregados, baseando-se nos resultados de funções de agregação, como COUNT(), SUM() ou AVG().

Ícone SQLSQL Impressionador

Domine a linguagem mais importante do Mundo para quem trabalha com Dados, seja para se destacar na sua empresa atual, para conseguir um diferencial em processos seletivos ou até mesmo para entrar em áreas de dados.

Começar agoraSeta para a direita
Fundo SQLTelas SQL
Luz SQL

Perguntas frequentes

1. Quando usar WHERE e quando usar HAVING no SQL?

Use o WHERE quando precisar filtrar registros antes de qualquer agrupamento, com base em valores de colunas comuns. Use o HAVING quando precisar filtrar grupos já formados pelo GROUP BY, com base em funções de agregação como COUNT, SUM ou AVG. Os dois podem aparecer na mesma consulta.

2. Posso usar WHERE e HAVING na mesma consulta?

Sim, e é bastante comum. O WHERE age primeiro, reduzindo as linhas antes do agrupamento; em seguida o GROUP BY forma os grupos e o HAVING filtra esses grupos pelo resultado da agregação. Exemplo: filtrar apenas clientes do gênero masculino no WHERE e depois manter só grupos com contagem maior que 25 no HAVING.

3. Por que não posso usar COUNT dentro do WHERE?

Porque o WHERE é avaliado antes do agrupamento, quando as funções de agregação ainda não foram calculadas. Tentar usar COUNT, SUM ou AVG no WHERE gera erro. Para filtrar por um valor agregado, você precisa do HAVING, que é executado após o GROUP BY, quando esses cálculos já existem.

4. O HAVING funciona sem o GROUP BY?

Na maioria dos bancos, o HAVING é usado junto com o GROUP BY para filtrar grupos. Alguns SGBDs aceitam HAVING sem GROUP BY quando há uma função de agregação sobre a tabela inteira, tratando tudo como um único grupo. Ainda assim, o uso recomendado e mais claro é sempre acompanhado de GROUP BY.

Conclusão – Diferença Entre WHERE e HAVING no SQL

O WHERE e o HAVING são ferramentas essenciais no SQL para filtrar dados em diferentes estágios de uma consulta. O WHERE é usado para restringir os resultados antes do agrupamento, enquanto o HAVING refina os dados após o agrupamento.

Compreender a diferença entre eles é fundamental para escrever consultas SQL mais eficientes e precisas.

Esse conhecimento é especialmente útil ao lidar com grandes volumes de dados em tabelas relacionais, onde a performance e a precisão das consultas são essenciais para obter insights valiosos.

Quer dominar o SQL e otimizar suas consultas? Confira o nosso Curso Completo SQL Impressionador e aprenda a construir análises de dados cada vez mais completas.

Hashtag Treinamentos

Para acessar outras publicações de SQL, clique aqui!


Quer aprender mais sobre SQL com um minicurso básico gratuito?

Posts mais recentes de SQL

Posts mais recentes da Hashtag Treinamentos