特定項目に対する条件ではなく、指定した副問合せのデータが存在するかどうかで判断したい場合があります。
このような場合には、EXISTS演算子を利用します。
EXISTS演算子は、副問合せの結果が存在するかどうかを確認することができます。
副問合せの結果の評価は、以下の通りです。
 ・1行以上の結果を返す(データが存在する)場合  … TRUE
 ・1行も結果を返さない(データが存在しない)場合 … FALSE

上記の評価を逆転させたい場合には、NOT EXISTS演算子を利用します。
NOT EXISTSの副問合せの結果の評価は、以下の通りです。
 ・1行以上の結果を返す(データが存在する)場合  … FALSE
 ・1行も結果を返さない(データが存在しない)場合 … TRUE

EXISTS演算子の構文は、以下の通りです。
SELECT * FROM [テーブル名]
WHERE EXISTS (
SELECT * FROM [テーブル名]
WHERE 条件式
)

上記を見て分かる通り、EXISTS演算子には、左辺が必要ありません。
これは、条件の評価対象が項目ではなく、指定した副問合せの結果に対するものだからです。

以下、サンプルです。
《環境》
利用するテーブル:
 社員テーブル(Employee)
 部署テーブル(Dept)

項目:
 Employee(EmpID, Name, DeptID)
  (社員番号, 氏名, 部署コード)
 Dept(DeptID, DeptName)
  (部署コード, 部署名)

《SQL》
SELECT * FROM Employee
WHERE EXISTS (
SELECT * FROM Dept
WHERE Dept.DeptID = Employee.DeptID
)


上記では、部署テーブルに部署コードが存在する社員情報を抽出します。
(メインのSQLで参照しているテーブルの項目をWHERE句に指定しています)
部署テーブルに部署コードが存在しない社員情報を抽出したい場合には、NOT EXISTS演算子を使うため、以下のようになります。

《SQL》
SELECT * FROM Employee
WHERE NOT EXISTS (
SELECT * FROM Dept
WHERE Dept.DeptID = Employee.DeptID
)


【補足事項】
・IN演算子との違いは、副問合せの選択リストの項目数に関係なく処理できることです。
 副問合せの選択リストにワイルドカードである「*」を指定することもできます。
・IN演算子よりも、EXISTS演算子を利用した方がパフォーマンスが優れています。
 しかし、可読性がIN演算子よりも劣ります。
 →処理速度に重点を置く場合には、EXISTSを利用しましょう。