Questão de Banco de Dados — SQL — FGV 2025
- Código
- fg120697
- Banca
- FGV
- Órgão
- SEFAZ-PR
- Ano
- 2025
- Nível
- Superior
- Cargo
- Auditor Fiscal (Tarde)
- AF – F – F.
- BF – V – V.
- CV – V – F.
- DV – F – V.
- EV – V – V.
GabaritoE — V – V – V.
Gabarito: letra E — V, V, V. As três afirmativas são verdadeiras: a cláusula WHERE filtra linhas antes da agregação (GROUP BY), a cláusula HAVING filtra grupos após a agregação, e funções agregadas como SUM() e AVG() não podem ser usadas no WHERE, apenas no HAVING. Essa é a ordem correta de processamento de uma consulta SQL com agregação: WHERE → GROUP BY → HAVING.
A banca cobra o conhecimento da ordem lógica de execução das cláusulas SQL e da restrição de uso de funções agregadas. O material de apoio reforça que "WHERE filtra registros individuais antes da agregação, enquanto HAVING filtra grupos após a agregação" e que funções agregadas só aparecem no HAVING, nunca no WHERE.
Afirmativa | Descrição | Valor Lógico | Justificativa |
|---|---|---|---|
1 | A cláusula WHERE pode filtrar as linhas antes da agregação (ou seja, antes do GROUP BY). | V | A cláusula WHERE é aplicada antes do agrupamento, selecionando linhas individuais que participarão da agregação. |
2 | A cláusula HAVING filtra os grupos depois da agregação. | V | A cláusula HAVING é usada após o agrupamento para filtrar grupos com base em condições, geralmente envolvendo funções agregadas. |
3 | Não é possível usar funções agregadas como SUM() e AVG() na cláusula WHERE, mas é permitido na cláusula HAVING. | V | Funções agregadas operam sobre conjuntos de linhas; o WHERE é avaliado linha a linha antes da agregação, enquanto o HAVING é avaliado após a agregação. |
A cláusula WHERE é aplicada antes do agrupamento (GROUP BY), selecionando quais linhas individuais participarão da agregação. Conforme o conteúdo de apoio: "WHERE filtra registros individuais antes da agregação". Portanto, é correto afirmar que WHERE pode filtrar linhas antes do GROUP BY.
A cláusula HAVING é usada após o agrupamento, para filtrar grupos com base em condições que geralmente envolvem funções agregadas. A sintaxe típica é: SELECT colunas FROM tabela WHERE condição GROUP BY coluna HAVING condição. O material confirma que HAVING filtra grupos após a agregação.
Funções agregadas (SUM, AVG, COUNT, MAX, MIN) operam sobre conjuntos de linhas. A cláusula WHERE é avaliada linha a linha, antes de qualquer agregação, portanto não pode conter tais funções. Já o HAVING é avaliado após a agregação, sendo o local apropriado para usá-las. O conteúdo de apoio afirma que "não é possível usar funções agregadas (...) na cláusula WHERE, mas é permitido na cláusula HAVING". A afirmativa está perfeita.
Agora, vejamos cada alternativa de combinação V/F:
A sequência F – F – F é falsa porque todas as três afirmativas são verdadeiras. Logo, essa alternativa não pode ser a correta.
F – V – V: A primeira afirmativa é verdadeira, mas aqui está marcada como F. Portanto, incorreta.
V – V – F: A terceira afirmativa é verdadeira, mas aqui está marcada como F. Incorreta.
V – F – V: A segunda afirmativa é verdadeira, mas aqui está marcada como F. Incorreta.
V – V – V: Todas as afirmativas são verdadeiras, conforme demonstrado. A sequência coincide exatamente com a realidade da linguagem SQL.
A ordem de execução de uma consulta SQL é: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. Lembre-se: WHERE filtra linhas, HAVING filtra grupos. Funções agregadas só são permitidas no SELECT e no HAVING, nunca no WHERE. Treine com exemplos práticos para fixar.
Gabarito: letra E
Link permanente: /questoes/fg120697