効率はプラットフォームに依存すると思います。Oracle では、EXISTS 句内の SELECT * および SELECT 1 は、同一のメモリ コストで同一の Explain Plan を生成します。違いはありません。ただし、他のプラットフォームは異なる場合があります。
個人的な好みの問題として、私は使用します
SELECT *
特定のフィールドを SELECT すると、読者がその特定のフィールドを気にかけていると誤解する可能性があるため、そのサブクエリをコピーして貼り付け、変更せずに実行して出力を確認することもできます。
ただし、SQL ステートメントの EXISTS 句は少しコードのにおいがします (IMO)。必要なものを取得するための最良かつ最も明確な方法である場合もありますが、ほとんどの場合、結合として表現できるため、データベース エンジンが最適化するのがはるかに簡単になります。
SELECT *
FROM SOME_TABLE ST
WHERE EXISTS(
SELECT 1
FROM SOME_OTHER_TABLE SOT
WHERE SOT.KEY_VALUE1 = ST.KEY_VALUE1
AND SOT.KEY_VALUE2 = ST.KEY_VALUE2
)
以下と論理的に同一です。
SELECT *
FROM
SOME_TABLE ST
INNER JOIN
SOME_OTHER_TABLE SOT
ON ST.KEY_VALUE1 = SOT.KEY_VALUE1
AND ST.KEY_VALUE2 = SOT.KEY_VALUE2