Analista Legislativo - Desenvolvedor de Banco de Dados
Em um ambiente Oracle, em condições ideais, um Analista precisa criar uma consulta para exibir o nome e o salário dos funcionários cujos números de departamento e salários correspondam a números de departamento e salários de funcionários que ganham comissão. Considerando que os campos usados na instrução existem na tabela colaboradores, a instrução PL/SQL correta que o Analista deve utilizar é:
ASELECT nome, salario FROM colaboradores WHERE (salario, idDepartamento) HAVE comissao NOT NULL;
BSELECT nome, salario FROM colaboradores WHERE (salario, idDepartamento) = (SELECT salario, idDepartamento FROM colaboradores WHERE comissao IS NOT NULL);
CSELECT nome, salario FROM colaboradores WHERE (salario, idDepartamento) IN (SELECT salario, idDepartamento FROM colaboradores WHERE comissao IS NOT NULL);
DSELECT nome, salario FROM colaboradores WHERE (comissão!=0 OR comissão IS NOT NULL);
ESELECT nome, salario FROM colaboradores WHERE (salario, idDepartamento) IS (SELECT salario, idDepartamento FROM colaboradores WHERE comissao!=0);
Revelar gabarito e comentário▾
GabaritoC — SELECT nome, salario FROM colaboradores WHERE (salario, idDepartamento) IN (SELECT salario, idDepartamento FROM colaboradores WHERE comissao IS NOT NULL);
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”.
PL/SQL: Subconsultas com IN
Gabarito: letra C. A alternativa correta utiliza o operador IN com uma subconsulta que retorna os pares (salario, idDepartamento) dos funcionários que possuem comissão (comissao IS NOT NULL). Essa sintaxe permite comparar múltiplos valores de uma só vez, atendendo exatamente ao requisito de exibir funcionários cujo departamento e salário coincidam com os daqueles que ganham comissão.
A banca testa o conhecimento sobre operadores de comparação em SQL e o tratamento de subconsultas. O principal ponto de atenção é que o operador = só deve ser usado quando a subconsulta retorna um único valor; para múltiplos valores, o correto é IN.
Operador
Sintaxe
Funciona com múltiplos valores?
Uso correto no contexto
=
WHERE (col1, col2) = (subconsulta)
❌ Não (apenas valor único)
❌ Incorreto
IN
WHERE (col1, col2) IN (subconsulta)
✅ Sim
✅ Correto
IS
WHERE (col1, col2) IS (subconsulta)
❌ Não (sintaxe inválida)
❌ Incorreto
HAVE
WHERE (col1, col2) HAVE ...
❌ Não (cláusula inexistente)
❌ Incorreto
Condição simples
WHERE comissão!=0 OR comissão IS NOT NULL
❌ Não (não compara pares)
❌ Incorreto
Alternativa A — ❌ Incorreta
A cláusula HAVE não existe em SQL. O comando tenta usar HAVE comissao NOT NULL, o que é inválido. O correto seria usar WHERE comissao IS NOT NULL.
Alternativa B — ❌ Incorreta
Usa o operador = para comparar o par (salario, idDepartamento) com o resultado da subconsulta. Como a subconsulta pode retornar mais de uma linha, o = não é adequado. O = é para comparações que retornam um único valor escalar.
Alternativa C — ✅ Correta ⟵ GABARITO
A sintaxe WHERE (col1, col2) IN (subconsulta) é a forma correta de comparar um conjunto de colunas com múltiplos resultados de uma subconsulta. Aqui, a subconsulta seleciona salario e idDepartamento dos funcionários com comissão não nula, e o IN verifica se o par da linha atual está nesse conjunto.
Alternativa D — ❌ Incorreta
A condição (comissão!=0 OR comissão IS NOT NULL) não atende ao enunciado, que exige que os salários e departamentos correspondam aos de funcionários com comissão. Além disso, o operador != não é padrão SQL (o correto é <>), embora em alguns SGBDs seja aceito. A condição também filtra apenas por comissão, ignorando a comparação de departamento e salário.
Alternativa E — ❌ Incorreta
Utiliza IS no lugar de IN, o que é inválido. Além disso, a subconsulta usa comissao!=0 em vez de IS NOT NULL, o que não captura corretamente funcionários com comissão nula ou nula? Na verdade, comissao!=0 exclui valores nulos, pois nulo não é igual a zero, mas também não é diferente. O correto é IS NOT NULL para verificar se a comissão existe.
PEGA ESSA DICA!
Na hora da prova, lembre-se: subconsultas que podem retornar múltiplas linhas exigem operadores como IN, ANY ou ALL. O operador = (ou <>) só vale quando a subconsulta retorna exatamente um valor (escalar). Decore a diferença: =, >, < etc. com subconsulta exigem garantia de uma única linha; IN aceita várias.