Os parênteses não alteram a semântica. A posição do
ON
cláusula controla a ordem do processamento lógico de junções. Primeira 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ênteses redundantes removidos)
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
Então logicamente em seu primeiro exemplo, a junção em
Transaction, Product
acontece primeiro, então a tabela virtual resultante disso é unida ao Customer
, enquanto no seu segundo exemplo a junção em Transaction, Customer
acontece primeiro, então a tabela virtual resultante disso é unida ao Product
Isso é apenas logicamente e como as junções internas são associativas e comutativas, isso provavelmente não fará diferença no plano de execução (a menos que você adicione
OPTION (FORCE ORDER)
para a consulta), mas pode fazer para junções externas. Este é coberto por Itzik Ben Gan aqui mas o artigo tem várias imprecisões, veja a carta de acompanhamento de Lubor Kollar também.