このような t-sql クエリの条件を記述できる状況によく遭遇します...
DECLARE @FirstName NVARCHAR(500)
SET @FirstName ='Joe'
SELECT *
FROM dbo.Customers c
WHERE
CASE
WHEN @FirstName <> '' THEN
CASE WHEN c.FirstName= @FirstName THEN 1 ELSE 0 END
ELSE 1
END = 1
それともこんな...
SELECT *
FROM dbo.Customers c
WHERE
(@FirstName = '' OR (@FirstName <> '' AND c.FirstName = @FirstName))
どちらも同じ結果を生成し、両方のクエリ プランは同じように見えます。
だから、どちらがベストプラクティスなのか、それとも落とし穴があるのか 興味がありますか?