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.