一般的に、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
で 。
パフォーマンスの詳細については、ブログのこの記事を参照してください:
-
IN
vs.JOIN
vs.EXISTS