次の2つのSQLクエリは同じ結果を返します。
SELECT * FROM Table1
WHERE Table1.Value1 = 'something' OR Table1.Value2 IN (SELECT Value2 FROM Table2)
SELECT * FROM Table1
LEFT JOIN Table2
ON Table1.Value2 = Table2.Value2
WHERE (Table1.Value1 = 'something' OR Table2.Value2 IS NOT NULL)
同様に、これら2つのクエリは同じ結果を返します。
SELECT * FROM Table1
WHERE Table1.Value1 = 'something' AND Table1.Value2 NOT IN (SELECT Value2 FROM Table2)
SELECT * FROM Table1
LEFT JOIN Table2
ON Table1.Value2 = Table2.Value2
WHERE Table1.Value1 = 'something' AND Table2.Value2 IS NULL
個人的には、「IN」または「NOT IN」を使用するオプションを読む方が簡単だと思います(特に、実際のクエリにはすでに結合の山が含まれているため)。ただし、Table2の値の数が大きくなると(現在は3つの結果しか返されない)、このクエリは非効率になりますか?それとも、クエリオプティマイザはそれを理解し、舞台裏で結合に変えますか?SQLServer2012を使用しています。