In all modern databases all these constructs are optimized to the same plan.
Some databases (like SQL Server
) require an ON
condition after the INNER JOIN
, so your third query just won’t parse there.
Visibility scope of the tables is in the JOIN
order, so this query:
SELECT *
FROM s1
JOIN s2
ON s1.id IN (s2.id, s3.id)
CROSS JOIN
s3
won’t parse, while this one:
SELECT *
FROM s2
CROSS JOIN
s3
JOIN s1
ON s1.id IN (s2.id, s3.id)
will.