Filtrar dados no SQL é essencial para extrair informações relevantes, reduzir o volume de resultados e melhorar o desempenho das consultas. Acerca desse cenário, avalie as afirmativas a seguir e assinale (V) para a verdadeiras e (F) para a falsa. ( ) A cláusula WHERE pode filtrar as linhas antes da agregação (ou seja, antes do GROUP BY). ( ) A cláusula HAVING filtra os grupos depois da agregação. ( ) Não é possível usar funções agregadas como SUM() e AVG() na cláusula WHERE, mas é permitido na cláusula HAVING. As afirmativas são, respectivamente,
- A)F – F – F.
Errada, porque as três afirmativas são verdadeiras, não falsas.
- B)F – V – V.
Errada, porque a primeira afirmativa é verdadeira e não falsa.
- C)V – V – F.
Errada, porque a terceira afirmativa também é verdadeira, já que agregadas não vão no WHERE, mas podem ir no HAVING.
- D)V – F – V.
Errada, porque a segunda afirmativa é verdadeira: HAVING filtra grupos após a agregação.
- E)V – V – V.
Certa, porque as três afirmativas estão corretas: WHERE filtra linhas, HAVING filtra grupos e funções agregadas podem ser usadas no HAVING.
Gabarito: E
Em SQL, a lógica é bem intuitiva: primeiro você filtra as linhas, depois você pode agrupar e, só então, filtrar os grupos. A cláusula WHERE atua sobre as linhas individuais antes da etapa de agregação e antes do GROUP BY. Já a cláusula HAVING entra depois, quando os grupos já foram formados, servindo para limitar resultados agregados. Por isso, a primeira afirmativa é verdadeira: WHERE pode sim filtrar antes da agregação. A segunda também é verdadeira, porque HAVING foi justamente criada para trabalhar com grupos, como em consultas com COUNT(), SUM() e AVG(). A terceira afirmativa também está correta: funções agregadas como SUM() e AVG() normalmente não podem aparecer no WHERE, porque nesse momento ainda não existe o grupo calculado. Mas elas podem ser usadas no HAVING, pois ali a agregação já aconteceu. Em termos práticos, o WHERE cuida do filtro dos registros, e o HAVING cuida do filtro do resultado agrupado. Então, o gabarito é E, com a sequência V - V - V. Essa é a regra clássica de SQL e costuma aparecer bastante em prova, sem muita firula: WHERE filtra linhas, HAVING filtra grupos.