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

Sintaxis y encapsulación Odd INNER JOIN

Los paréntesis no cambian la semántica. La posición del ON La cláusula controla el orden del procesamiento lógico de las uniones.

Primera Consulta

SELECT Customer.Name,
       Product.Desc,
       Transaction.Date
FROM   Product
       INNER JOIN Transaction
         ON Transaction.ProductID = Product.ID
       INNER JOIN Customer
         ON Transaction.CustomerID = Customer.ID 

Segunda Consulta

(Paréntesis redundantes eliminados)

SELECT Customer.Name,
       Product.Desc,
       Transaction.Date
FROM   Product
       INNER JOIN Transaction
                  INNER JOIN Customer
                    ON Transaction.CustomerID = Customer.ID
         ON Transaction.ProductID = Product.ID 

Así que lógicamente en su primer ejemplo, la unión en Transaction, Product sucede primero, luego la tabla virtual resultante se une a Customer , mientras que en su segundo ejemplo la unión en Transaction, Customer sucede primero, luego la tabla virtual resultante se une a Product

Esto es lógico y dado que las uniones internas son tanto asociativas como conmutativas, esto probablemente no hará ninguna diferencia en el plan de ejecución (a menos que agregue OPTION (FORCE ORDER) a la consulta) pero puede servir para uniones externas.

Esto está tratado por Itzik Ben Gan aquí pero el artículo tiene una serie de inexactitudes, consulte la carta de seguimiento de Lubor Kollar también.