ジョーのリンクは良い出発点です。 Quassnoiもこれをカバーしています。
一般的に フィールドに適切なインデックスが付けられている場合、またはより多くのレコードを除外する予定の場合(つまり、行がたくさんある場合 EXIST サブクエリ内)NOT EXISTS パフォーマンスが向上します。
EXISTS およびNOT EXISTS 両方の短絡-レコードが基準に一致するとすぐに、レコードは含まれるかフィルターで除外され、オプティマイザーは次のレコードに移動します。
LEFT JOIN すべてのレコードに参加します 一致するかどうかに関係なく、一致しないすべてのレコードを除外します。テーブルが大きい場合や、複数のJOINがある場合 基準では、これは非常に多くのリソースを消費する可能性があります。
私は通常、NOT EXISTSを使用しようとします およびEXISTS 可能であれば。 SQL Serverの場合、IN およびNOT IN 意味的に同等であり、記述しやすい場合があります。 これらは、SQLServerで短絡が保証されている唯一の演算子の1つです。