TableA LEFT OUTER JOIN TableB
é equivalente a TableB RIGHT OUTER JOIN Table A
. No Oracle,
(+)
denota a tabela "opcional" no JOIN. Então, na sua primeira consulta, é um P LEFT OUTER JOIN S
. Em sua segunda consulta, é S RIGHT OUTER JOIN P
. Eles são funcionalmente equivalentes. Na terminologia, RIGHT ou LEFT especifica qual lado da junção sempre tem um registro e o outro lado pode ser nulo. Então, em um
P LEFT OUTER JOIN S
, P
sempre terá um registro porque está na LEFT
, mas S
poderia ser nulo. Veja este exemplo de java2s.com para explicação adicional.
Para esclarecer, acho que estou dizendo que a terminologia não importa, pois está lá apenas para ajudar a visualizar. O que importa é que você entenda o conceito de como funciona.
DIREITA x ESQUERDA
Eu vi alguma confusão sobre o que importa na determinação RIGHT vs LEFT na sintaxe de junção implícita.
JUNÇÃO EXTERNA ESQUERDA
SELECT *
FROM A, B
WHERE A.column = B.column(+)
JUNÇÃO EXTERNA DIREITA
SELECT *
FROM A, B
WHERE B.column(+) = A.column
Tudo o que fiz foi trocar os lados dos termos na cláusula WHERE, mas eles ainda são funcionalmente equivalentes. (Veja mais acima na minha resposta para mais informações sobre isso.) O posicionamento do
(+)
determina DIREITA ou ESQUERDA. (Especificamente, se o (+)
está à direita, é um LEFT JOIN. Se (+)
está à esquerda, é um RIGHT JOIN.) Tipos de JOIN
Os dois estilos de JOIN são JOINs implícitos e JOINs explícitos . Eles são estilos diferentes de escrever JOINs, mas são funcionalmente equivalentes.
Veja esta pergunta SO .
Joins implícitos simplesmente liste todas as tabelas juntas. As condições de junção são especificadas em uma cláusula WHERE.
JOIN Implícito
SELECT *
FROM A, B
WHERE A.column = B.column(+)
Joins explícitos associar condições de junção com a inclusão de uma tabela específica em vez de uma cláusula WHERE.
UNIÇÃO Explícita
SELECT *
FROM A
LEFT OUTER JOIN B ON A.column = B.column
Esses JOINs implícitos podem ser mais difíceis de ler e compreender e também têm algumas limitações, pois as condições de junção são misturadas com outras condições WHERE. Como tal, JOINs implícitos são geralmente recomendados em favor da sintaxe explícita.