Considere um banco de dados Oracle 11g aberto e em condições ideais que possui as tabelas e campos presentes na instrução PL/SQL:SELECT e.sobrenome, e.id_departamento, d.nome_departamentoFROM empregados e, departamentos dWHERE ...I... ; Usando join externa, para que a consulta recupere todas as linhas na tabela empregados, mesmo que não haja correspondência na tabela departamentos, a lacuna I deve ser preenchida por
Ae.id_departamento(+) = d.id_departamento
Bd.id_departamento = e.id_departamento
Cd.id_departamento = e.id_departamento RIGHT JOIN ON
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: Outer Join com operador (+)
Gabarito: letra D. No Oracle 11g, para fazer um left outer join (todas as linhas da tabela à esquerda, mesmo sem correspondência), utiliza-se o operador (+) do lado direito da igualdade, na tabela que pode ter ausência de correspondência. Na sintaxe antiga (sem JOIN explícito), o (+) indica outer join. Para recuperar todos os empregados, a condição deve ser e.id_departamento = d.id_departamento(+), ou seja, o (+) fica em departamentos, que é a tabela que pode não ter correspondência.
Outer Join Oracle (operador +)
1Left Outer Join (todas da esquerda)
Sinal (+) na tabela da direita
Ex.: e.id = d.id(+)
2Right Outer Join (todas da direita)
Sinal (+) na tabela da esquerda
Ex.: e.id(+) = d.id
3Inner Join (sem +)
Só correspondências
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
e.id_departamento(+) = d.id_departamento — Inverte o lado do operador. O (+) em e (empregados) faria com que a tabela empregados recebesse valores nulos nas colunas de departamentos, mas manteria todas as linhas de departamentos. Isso seria um right outer join, não atendendo ao requisito de recuperar todos os empregados.
Alternativa B — ❌ Incorreta
d.id_departamento = e.id_departamento — Sem operador (+), é um inner join, retornando apenas as linhas que têm correspondência em ambas as tabelas. Empregados sem departamento seriam excluídos.
Alternativa C — ❌ Incorreta
d.id_departamento = e.id_departamento RIGHT JOIN ON — A sintaxe está misturada: o comando usa a cláusula FROM com vírgula (separando as tabelas) e a condição no WHERE. A expressão RIGHT JOIN ON não é válida nesse contexto; além disso, para ter todas as linhas de empregados, o RIGHT JOIN colocaria empregados como tabela da direita, o que não é o correto.
Alternativa D — ✅ Correta ⟵ GABARITO
e.id_departamento = d.id_departamento(+) — Operador (+) do lado de departamentos indica que, mesmo que não haja departamento correspondente para um empregado, a linha do empregado será incluída com valores nulos nas colunas de departamento. É a sintaxe correta para left outer join na notação antiga do Oracle.
Alternativa E — ❌ Incorreta
e.id_departamento = d.id_departamento — Sem o (+), é um inner join, excluindo empregados sem departamento.
PEGA ESSA DICA!
No Oracle, o operador (+) fica sempre do lado oposto ao da tabela que você quer manter todas as linhas. Para left join (todas as linhas da esquerda), o (+) vai na tabela da DIREITA. Para right join, o (+) vai na tabela da ESQUERDA. Memorize: + do lado que PODE FALTAR.