違いは、existsを使用すると -内部のクエリは通常、メインクエリに依存します(つまり、メインクエリの列を使用するため、個別に実行することはできません)。したがって、メインクエリの各行について、サブクエリによって取得されたデータが存在するかどうかを確認します。
最初のクエリの問題は、existsブロック内のサブクエリがメインのクエリ列に依存しないことです。これは、常に1の行を返す個別のクエリです。 、したがって、メインクエリの任意の行について、existsが存在します 常にtrueになります 。したがって、最初のクエリは
SELECT distinct(company_id)
FROM user
WHERE user.user_id = 123
AND user.company_id IS NOT NULL
fiddle も参照してください。