Дано:
WHERE (@Id Is NULL OR @Id = Table.Id)
Если @Id равно нулю: выражение оценивается как true. Вторая часть @Id = Table.Id все еще рассматривается? или достаточно того, что выражение оценивается как истинное, если первая часть (как в случае c #).
Это имеет отношение к некоторым более сложным операторам ИЛИ, где важно знать, все ли части оцениваются.
UPDATE:
С тех пор я нашел этот синтаксис хорошей альтернативой
WHERE (Table.Id = ISNULL(@Id, Table.Id))