ANC - Analista em Computação - Ênfase em Administração de Dados
Considerando a tabela "produtos", exemplificada abaixo, com as colunas "id" INTEGER, "nome" VARCHAR(512), "preco" DECIMAL, "quantidade" INTEGER, qual a consulta SQL que retorna o(s) nome(s) do(s) produto(s) com a maior quantidade? A consulta retornaria Produto C e Produto E no exemplo abaixo.
ASELECT nome FROM produtos ORDER BY quantidade DESC LIMIT 1
BSELECT * FROM produtos ORDER BY quantidade IS MAX(quantidade)
CSELECT nome FROM produtos WHERE quantidade = MAX(quantidade) LIMIT 1
DSELECT nome FROM produtos WHERE quantidade = (SELECT MAX(quantidade) FROM produtos)
ENenhuma das alternativas anteriores.
Revelar gabarito e comentário▾
GabaritoD — SELECT nome FROM produtos WHERE quantidade = (SELECT MAX(quantidade) FROM produtos)
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Funções de agregação e subconsultas em SQL
Gabarito: letra D. A consulta correta usa uma subconsulta para calcular o valor máximo da coluna quantidade e, em seguida, filtra os produtos cuja quantidade é igual a esse valor máximo, retornando assim todos os produtos com a maior quantidade, inclusive quando há empate (Produto C e Produto E).
A questão exige que você retorne o nome de todos os produtos que possuem a maior quantidade na tabela. O ponto central é que pode haver mais de um produto com a mesma quantidade máxima, como no exemplo dado, onde tanto o Produto C quanto o Produto E têm a maior quantidade. Portanto, a consulta precisa ser capaz de retornar múltiplas linhas, e não apenas uma.
Para isso, a abordagem correta é usar uma subconsulta que calcule o valor máximo da coluna quantidade e, em seguida, comparar cada linha da tabela com esse valor. A sintaxe WHERE quantidade = (SELECT MAX(quantidade) FROM produtos) faz exatamente isso: a subconsulta (SELECT MAX(quantidade) FROM produtos) retorna um único valor (o maior), e a consulta externa seleciona todas as linhas onde a coluna quantidade é igual a esse valor. Isso garante que todos os produtos com a quantidade máxima sejam retornados, independentemente de quantos sejam.
Vamos analisar por que as outras alternativas estão incorretas. A alternativa A usa ORDER BY quantidade DESC LIMIT 1, que retorna apenas a primeira linha após ordenar pela quantidade em ordem decrescente. Isso retornaria apenas um produto, mesmo que houvesse empate, o que não atende ao requisito de retornar todos os produtos com a maior quantidade. A alternativa B tem uma sintaxe inválida, pois ORDER BY quantidade IS MAX(quantidade) não é uma expressão válida em SQL. A alternativa C tenta usar MAX(quantidade) diretamente na cláusula WHERE, o que não é permitido, pois funções de agregação não podem ser usadas diretamente no WHERE sem um GROUP BY ou subconsulta. A alternativa E é incorreta porque a alternativa D é válida.
A pegadinha desta questão é que muitos candidatos podem ser tentados a usar LIMIT 1 para obter o maior valor, mas isso não funciona quando há empate. A banca explora exatamente essa confusão entre retornar apenas um registro e retornar todos os registros que atendem à condição.
1Subconsulta calcula MAX(quantidade)
2WHERE compara cada linha ao máximo
3Retorna todos os produtos empatados
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
A consulta SELECT nome FROM produtos ORDER BY quantidade DESC LIMIT 1 retorna apenas o primeiro registro após ordenar pela quantidade em ordem decrescente. Isso retornaria apenas um produto, mesmo que houvesse empate na maior quantidade. No exemplo, retornaria apenas o Produto C ou o Produto E, mas não ambos, o que não atende ao requisito de retornar todos os produtos com a maior quantidade.
Alternativa B — ❌ Incorreta
A consulta SELECT * FROM produtos ORDER BY quantidade IS MAX(quantidade) é sintaticamente inválida. A expressão quantidade IS MAX(quantidade) não é uma expressão válida em SQL. A cláusula ORDER BY espera uma coluna ou expressão que possa ser avaliada para ordenação, e MAX(quantidade) é uma função de agregação que não pode ser usada dessa forma sem um GROUP BY ou subconsulta.
Alternativa C — ❌ Incorreta
A consulta SELECT nome FROM produtos WHERE quantidade = MAX(quantidade) LIMIT 1 é inválida porque funções de agregação como MAX() não podem ser usadas diretamente na cláusula WHERE. A cláusula WHERE filtra linhas individuais antes da agregação, e MAX(quantidade) é uma agregação que opera sobre um conjunto de linhas. Para usar MAX() em uma condição, é necessário usar uma subconsulta ou a cláusula HAVING com GROUP BY. Além disso, o LIMIT 1 limitaria o resultado a um único registro, o que não atenderia ao requisito de retornar todos os produtos com a maior quantidade.
Alternativa D — ✅ Correta ⟵ GABARITO
A consulta SELECT nome FROM produtos WHERE quantidade = (SELECT MAX(quantidade) FROM produtos) é a correta. A subconsulta (SELECT MAX(quantidade) FROM produtos) calcula o valor máximo da coluna quantidade. A consulta externa então seleciona os nomes dos produtos cuja quantidade é igual a esse valor máximo. Isso retorna todos os produtos com a maior quantidade, incluindo empates, como no exemplo, onde retornaria Produto C e Produto E.
Alternativa E — ❌ Incorreta
A alternativa E afirma que nenhuma das alternativas anteriores está correta. Como a alternativa D é uma consulta SQL válida e correta, a alternativa E é incorreta.