sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cuál es la diferencia en estas dos consultas al obtener dos conjuntos de resultados diferentes?

Realmente no hace ninguna diferencia cuando haces esto en INNER JOIN.

Sin embargo, cuando usa LEFT o RIGHT JOIN, marque la diferencia si coloca el filtro adicional en la cláusula JOIN o en la cláusula WHERE.

Cuando coloca el filtro en la cláusula WHERE, SQL Server realiza la combinación primero y luego completamente. filtra las filas donde el filtro no encaja.
--> esto reducirá el número de filas que se devuelven

Cuando coloca el filtro en JOIN, SQL Server realiza el filtrado durante la combinación, pero solo en la tabla donde colocó el filtro.
Todavía obtiene todas las filas de las otras tablas, pero solo esas tienen los datos de la tabla filtrada donde encaja el filtro.
--> esto no reducirá el número de filas, pero las columnas con datos de la tabla filteres estarán vacías en más filas

Es difícil de explicar... para que quede más claro, aquí hay un ejemplo:

Tome los datos de muestra de Respuesta de RedFilter :

CREATE TABLE [dbo].[t1](
    [ID] [int] NULL,
    [StatusID] [int] NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[t2](
    [ID] [int] NULL
) ON [PRIMARY]
INSERT INTO t1 (ID, StatusID) VALUES (1, 10)
INSERT INTO t1 (ID, StatusID) VALUES (2, 11)
INSERT INTO t1 (ID, StatusID) VALUES (3, 12)
INSERT INTO t1 (ID, StatusID) VALUES (4, 12)
INSERT INTO t2 (ID) VALUES (1)
INSERT INTO t2 (ID) VALUES (3)
INSERT INTO t2 (ID) VALUES (5)

...y ejecute las siguientes consultas en él:

/* this returns four rows, but only two will have data 
from the second table in the second column */
SELECT t1.ID, t2.ID
FROM t1 
LEFT JOIN t2 ON t1.Id = t2.Id 

/* this returns only one row: the one where t2.ID = 1 */
SELECT t1.ID, t2.ID
FROM t1 
LEFT JOIN t2 ON t1.Id = t2.Id 
WHERE t2.ID = 1 

/* this returns four rows as in the first query, but only one 
row will have data in the second column: the one where t2.ID = 1 */
SELECT t1.ID, t2.ID
FROM t1 
LEFT JOIN t2 ON t1.Id = t2.Id 
AND t2.ID = 1 

Tenga en cuenta los diferentes resultados como se indica en los comentarios.