Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

condição de junção ON vs em WHERE


Bem, o que você chama de "equivalente" não é equivalente para associações externas. Vamos pegar a junção esquerda por exemplo.

Condição em JOIN:
SELECT * FROM Customers c
LEFT JOIN CustomerAccounts ca ON ca.CustomerID = c.CustomerID AND c.State = 'NY'
LEFT JOIN Accounts a ON ca.AccountID = a.AccountID AND a.Status = 1

vs ONDE:
SELECT * FROM Customers c
LEFT JOIN CustomerAccounts ca ON ca.CustomerID = c.CustomerID
LEFT JOIN Accounts a ON ca.AccountID = a.AccountID
WHERE c.State = 'NY'
AND a.Status = 1

Colocar as condições na cláusula WHERE efetivamente torna as junções INNER junta, porque a cláusula WHERE é uma linha filtro que é aplicado depois as junções foram feitas.