Nawiasy nie zmieniają semantyki. Pozycja ON
Klauzula kontroluje kolejność logicznego przetwarzania złączeń.
Pierwsze zapytanie
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
Drugie zapytanie
(Usunięto zbędne nawiasy)
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
Więc logicznie w pierwszym przykładzie sprzężenie w Transaction, Product
dzieje się najpierw, a następnie wirtualna tabela wynikająca z tego jest dołączona do Customer
, podczas gdy w drugim przykładzie sprzężenie w Transaction, Customer
dzieje się najpierw, a następnie wirtualna tabela wynikająca z tego jest dołączona do Product
Jest to tylko logiczne i ponieważ sprzężenia wewnętrzne są zarówno asocjacyjne, jak i przemienne, prawdopodobnie nie będzie miało to żadnego wpływu na plan wykonania (chyba że dodasz OPTION (FORCE ORDER)
do zapytania), ale może to zrobić dla sprzężeń zewnętrznych.
Jest to omówione przez Itzika Ben Gana tutaj ale artykuł zawiera wiele nieścisłości, zobacz list uzupełniający napisany przez Lubora Kollara również.