Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ist es besser, einen Equi-Join in der from-Klausel oder der where-Klausel zu machen?

Im Allgemeinen macht es keinen semantischen Unterschied.

Es gibt jedoch einen Grenzfall, in dem dies möglich ist. Wenn die (veraltete) GROUP BY ALL Konstrukt wird wie unten dargestellt zur Abfrage hinzugefügt.

DECLARE @A TABLE(A_ID INT, DURATION DECIMAL(3,2) )
INSERT INTO @A VALUES(1,2.00)

DECLARE @B TABLE(A_ID INT)
INSERT INTO @B VALUES(1)

/*Returns one row*/
SELECT *
FROM @A A
INNER JOIN @B B ON A.A_ID = B.A_ID
WHERE A.DURATION = 3.00
GROUP BY ALL A.A_ID, A.DURATION, B.A_ID

/*Returns zero rows*/    
SELECT *
FROM @A A
INNER JOIN @B B ON A.A_ID = B.A_ID  AND A.DURATION = 3.00
GROUP BY ALL A.A_ID, A.DURATION, B.A_ID