Utilizando subconsultas PL/SQL em um banco de dados Oracle 11g, aberto e em condições ideais, para um Técnico exibir o conteúdo dos campos nome, salario e id de todos os funcionários da tabela Funcionario cujo conteúdo do campo salario seja igual ao menor salário cadastrado, deverá utilizar o comando SELECT nome, salario, id FROM Funcionario
AWHERE salario = (SELECT MIN(salario) FROM Funcionario);
BINNER JOIN Funcionario ON salario = MIN(salario);
CWHERE salario = MIN(salario) FROM Funcionario;
DJOIN ON salario = (SELECT MIN(salario) FROM Funcionario);
EWHERE salario = MIN(salario);
Revelar gabarito e comentário▾
GabaritoA — WHERE salario = (SELECT MIN(salario) FROM Funcionario);
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”.
Oracle 11g: Subconsultas para menor salário
Gabarito: letra A. Para exibir funcionários com salário igual ao menor salário cadastrado, a sintaxe correta utiliza uma subconsulta que retorna o valor mínimo com a função agregada MIN(), comparando-o na cláusula WHERE. A única alternativa que emprega essa estrutura corretamente é a letra A.
Alternativa
Comando
Correto?
Motivo
A
WHERE salario = (SELECT MIN(salario) FROM Funcionario)
✅
Subconsulta retorna o menor salário; comparação correta no WHERE.
B
INNER JOIN Funcionario ON salario = MIN(salario)
❌
MIN() não pode ser usado diretamente em condição de JOIN.
C
WHERE salario = MIN(salario) FROM Funcionario
❌
MIN() sem subconsulta e FROM inválido dentro do WHERE.
D
JOIN ON salario = (SELECT MIN(salario) FROM Funcionario)
❌
Sintaxe incompleta: falta tabela no JOIN; uso desnecessário.
E
WHERE salario = MIN(salario)
❌
MIN() sem subconsulta; não permitido diretamente no WHERE.
Alternativa A — ✅ Correta ⟵ GABARITO
O comando WHERE salario = (SELECT MIN(salario) FROM Funcionario) usa uma subconsulta (expressão entre parênteses) que retorna o menor salário da tabela. A cláusula WHERE compara cada salário com esse valor único, devolvendo apenas os registros que o igualam. Tanto a sintaxe quanto a semântica estão perfeitas para o problema proposto.
Alternativa B — ❌ Incorreta
INNER JOIN Funcionario ON salario = MIN(salario) — a função MIN() é uma função de agregação que só pode aparecer em cláusulas HAVING ou na lista SELECT (com GROUP BY), nunca diretamente em uma condição de JOIN. Além disso, a junção da tabela consigo mesma não faz sentido aqui, pois não há referência a uma segunda tabela ou alias.
Alternativa C — ❌ Incorreta
WHERE salario = MIN(salario) FROM Funcionario — MIN() não pode ser usado diretamente no WHERE; precisa estar dentro de uma subconsulta (entre parênteses) para ser avaliado separadamente. A presença de FROM dentro da condição também é inválida – a cláusula FROM já foi declarada antes do WHERE.
Alternativa D — ❌ Incorreta
JOIN ON salario = (SELECT MIN(salario) FROM Funcionario) — a sintaxe está incompleta: falta a tabela a ser usada no JOIN (ex.: FROM Funcionario f1 JOIN Funcionario f2 ON ...). Mesmo que ajustada, o JOIN é desnecessário para este problema; uma simples subconsulta no WHERE é a abordagem correta.
Alternativa E — ❌ Incorreta
WHERE salario = MIN(salario) — erro semelhante ao da alternativa C: a função agregada MIN() não pode aparecer diretamente na condição WHERE sem estar encapsulada em uma subconsulta. O Oracle 11g exige que a função seja avaliada como uma consulta separada para retornar um único valor escalar.
PEGA ESSA DICA!
Em consultas que usam funções agregadas (como MIN, MAX, AVG) para filtrar registros, lembre-se de que elas não podem ficar soltas no WHERE. A solução é isolar a agregação dentro de uma subconsulta (SELECT MIN(coluna) FROM tabela) e comparar o resultado com o operador desejado (=, >, <, etc.). Esse padrão aparece frequentemente em provas de bancos de dados.