Can an INNER JOIN offer better performance than EXISTS
Generally speaking, INNER JOIN
and EXISTS
are different things.
The former returns duplicates and columns from both tables, the latter returns one record and, being a predicate, returns records from only one table.
If you do an inner join on a UNIQUE
column, they exhibit same performance.
If you do an inner join on a recordset with DISTINCT
applied (to get rid of the duplicates), EXISTS
is usually faster.
IN
and EXISTS
clauses (with an equijoin correlation) usually employ one of the several SEMI JOIN
algorithms which are usually more efficient than a DISTINCT
on one of the tables.
See this article in my blog:
- IN vs. JOIN vs. EXISTS
Maybe, maybe not.
- The same plan will be generated most likely
- An INNER JOIN may require a DISTINCT to get the same output
- EXISTS deals with NULL
In sql server 2019
queries with IN
, EXIST
, JOIN
statements have different plans (if correct indexes added). So performence also is different. It is shown in article https://www.mssqltips.com/sqlservertip/6659/sql-exists-vs-in-vs-join-performance-comparison/ that JOIN
is some faster.
P.S. I understand that question was about sql server 2005 (in tags), but people mostly looks for answer by article title.