sql >> Base de Datos >  >> RDS >> Oracle

unir la condición ON vs en DONDE

Bueno, lo que llamas "equivalente" no es un equivalente para uniones externas. Tomemos como ejemplo la combinación izquierda.

Condición en UNIRSE:

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

frente a DÓNDE:

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

Poner las condiciones en la cláusula WHERE hace que las uniones sean INNER se une, porque la cláusula WHERE es una fila filtro que se aplica después se han realizado las uniones.