Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Qual consulta SQL é mais rápida? Filtrar em critérios de junção ou cláusula Where?


Em termos de desempenho, eles são os mesmos (e produzem os mesmos planos)

Logicamente, você deve fazer a operação que ainda faz sentido se substituir INNER JOIN com um LEFT JOIN .

No seu caso, ficará assim:
SELECT  *
FROM    TableA a
LEFT JOIN
        TableXRef x
ON      x.TableAID = a.ID
        AND a.ID = 1
LEFT JOIN
        TableB b
ON      x.TableBID = b.ID

ou isto:
SELECT  *
FROM    TableA a
LEFT JOIN
        TableXRef x
ON      x.TableAID = a.ID
LEFT JOIN
        TableB b
ON      b.id = x.TableBID
WHERE   a.id = 1

A consulta anterior não retornará nenhuma correspondência real para a.id diferente de 1 , então a última sintaxe (com WHERE ) é logicamente mais consistente.