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

Diferença entre as cláusulas ON e WHERE em junções de tabelas SQL


A principal diferença é quando você está usando junções diferentes.

Normalmente, você deve ver o mesmo resultado se usar associações internas, mas quando começar a usar associações LEFT, os resultados serão alterados.

Dê uma olhada no exemplo a seguir

DEMO do SQL Fiddle


E dê uma olhada no seguinte artigo (muito explicativo)

EDITAR para @ShannonSeverance

Esquema e dados de teste
CREATE TABLE Table1 (
  ID INT,
  Val VARCHAR(20)
 );

INSERT INTO Table1 VALUES (1,'a');
INSERT INTO Table1 VALUES (2,'a');

CREATE TABLE Table2 (
  ID INT,
  Val VARCHAR(20)
 );

INSERT INTO Table2 VALUES (1,'a');

e Testes
SELECT t1.ID,
t1.Val,
t2.ID ID2,
t2.Val Val2
FROM Table1 t1 INNER JOIN
Table2 t2 ON t1.ID = t2.ID AND t1.Val = t2.Val;

SELECT  t1.ID,
t1.Val,
t2.ID ID2,
t2.Val Val2
FROM Table1 t1,Table2 t2 
WHERE t1.ID = t2.ID
 AND t1.Val = t2.Val;

SELECT  t1.ID,
t1.Val,
t2.ID ID2,
t2.Val Val2
FROM Table1 t1 LEFT JOIN
Table2 t2 ON t1.ID = t2.ID  AND t1.Val = t2.Val;

SELECT  t1.ID,
t1.Val,
t2.ID ID2,
t2.Val Val2
FROM Table1 t1 LEFT JOIN
Table2 t2 ON t1.ID = t2.ID  
WHERE t1.Val = t2.Val;