私はクエリの最適化に取り組んでおり、SQLのOR演算子を常にどのように使用しているか疑問に思う状況に遭遇しました。(SQL Server 2000も)
条件付き(WHERE)句が次のようになっているクエリがあります。
WHERE (Column1 = @Param1 or Column1 LIKE @Param1 + '%')
AND (@Param2 = '' OR Column2 = @Param2 OR Column2 LIKE @Param2 + '%')
これで、SQLのORが両方の式を評価することを常に理解しました。したがって、左の式でtrueと評価されたすべてのレコードが、右の式でtrueと評価されたすべてのレコードとともに返されます。例えば:
SELECT * FROM TABLE1
WHERE COL1 = 'Test' OR Col2 = 'Data'
これにより、COL1が「テスト」であるすべてのレコードと、Col2が「データ」であるすべてのレコードが返されます。
上記の例では、次の条件でColumn2を変更しました。
AND(Column2 LIKE ISNULL(@Param2, '') + '%')
突然、0行が返されました。
ORは、TRUEの結果が見つかるまで式を評価するだけであると誤解したことがありますか、それとも2つの異なる結果が異なる結果を返す原因となる条件がありますか?