一般的に、IN およびJOIN さまざまな結果をもたらす可能性のあるさまざまなクエリです。
SELECT a.*
FROM a
JOIN b
ON a.col = b.col
と同じではありません
SELECT a.*
FROM a
WHERE col IN
(
SELECT col
FROM b
)
、b.colでない限り ユニークです。
ただし、これは最初のクエリの同義語です:
SELECT a.*
FROM a
JOIN (
SELECT DISTINCT col
FROM b
)
ON b.col = a.col
結合列がUNIQUEの場合 そのようにマークされているため、これらのクエリは両方ともSQL Serverで同じプランを生成します。 。
そうでない場合は、IN JOINよりも高速です DISTINCTで 。
パフォーマンスの詳細については、ブログのこの記事を参照してください:
-
INvs.JOINvs.EXISTS