Questão de Banco de Dados — Consultas e Comandos em SQL — Quadrix 2025
- Código
- qa699067
- Banca
- Quadrix
- Órgão
- CAU MA
- Ano
- 2025
- Cargo
- Ass TI ( )
- CCerto
- EErrado
GabaritoE — Errado
Gabarito: ERRADO (letra E). A consulta apresentada contém um erro de sintaxe: a cláusula WHERE deve vir antes da cláusula GROUP BY, e não depois. A ordem correta das cláusulas em uma consulta SQL é SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY. Portanto, a consulta SELECT projeto_id, COUNT(*) FROM tarefas GROUP BY projeto_id and WHERE projeto_id > 10; não é válida e não retornaria o número de tarefas por projeto.
A linguagem SQL (Structured Query Language) é a linguagem padrão para acesso e manipulação de bancos de dados relacionais. Ela é uma linguagem declarativa, ou seja, o usuário especifica o que deseja obter, sem precisar detalhar como o SGBD deve executar a consulta. Para entender o erro da questão, é fundamental conhecer a ordem lógica e sintática das cláusulas de um comando SELECT.
A ordem correta das cláusulas em uma consulta SQL é:
SELECT – especifica as colunas que serão retornadas.
FROM – especifica a(s) tabela(s) de onde os dados serão lidos.
WHERE – filtra as linhas da tabela antes de qualquer agrupamento.
GROUP BY – agrupa as linhas que possuem os mesmos valores nas colunas especificadas.
HAVING – filtra os grupos formados pela cláusula GROUP BY.
ORDER BY – ordena o resultado final.
A função de agregação COUNT(*) conta o número de linhas em cada grupo. Quando combinada com GROUP BY projeto_id, ela retorna a quantidade de tarefas para cada projeto. No entanto, a consulta da questão está com a ordem das cláusulas invertida: GROUP BY projeto_id and WHERE projeto_id > 10. O correto seria WHERE projeto_id > 10 GROUP BY projeto_id. Além disso, a palavra and não é usada para separar cláusulas; ela é um operador lógico usado dentro da cláusula WHERE para combinar condições.
A banca explora exatamente a confusão entre a ordem das cláusulas e o uso do operador lógico AND. O candidato que conhece a função do GROUP BY e do COUNT(*) pode ser induzido a marcar "Certo", sem perceber o erro de sintaxe. A pegadinha está em apresentar uma consulta que, se corrigida, faria exatamente o que o enunciado descreve, mas que, como está escrita, não é válida.
A consulta SELECT projeto_id, COUNT(*) FROM tarefas GROUP BY projeto_id and WHERE projeto_id > 10; não retorna o número de tarefas por projeto, pois está sintaticamente incorreta. O erro está na ordem das cláusulas: a cláusula WHERE deve preceder a cláusula GROUP BY. A forma correta seria SELECT projeto_id, COUNT(*) FROM tarefas WHERE projeto_id > 10 GROUP BY projeto_id;. Além disso, a palavra and não é um separador de cláusulas; ela é um operador lógico utilizado dentro da cláusula WHERE para combinar múltiplas condições. Portanto, a consulta apresentada não seria executada corretamente em nenhum SGBD relacional.
A banca inverte a ordem das cláusulas WHERE e GROUP BY e insere a palavra and entre elas. O candidato que sabe que GROUP BY + COUNT(*) conta registros por grupo pode marcar "Certo" sem perceber o erro de sintaxe. Lembre-se: a ordem das cláusulas é fixa — WHERE vem antes de GROUP BY, e and é um operador lógico, não um conector de cláusulas.
Para questões de SQL, decore a ordem das cláusulas: SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY. Se alguma cláusula estiver fora dessa ordem, a consulta está errada. Além disso, desconfie de consultas que usam and ou or fora da cláusula WHERE.
Gabarito: letra E
Link permanente: /questoes/qa699067