Мне кажется, что самый чистый способ сделать это (в T-SQL):
SELECT * FROM TABLE WHERE column = ISNULL(@param, column)
Другие СУБД предпочли бы COALESCE вместо ISNULL.
Я думаю, что здесь более очевидно, что вы собираетесь делать, особенно когда вы начинаете добавлять другие операторы OR, и это также избавляет вас от необходимости использовать скобки при объединении с предложениями AND.
В моем (очень) ограниченном тестировании было также незначительное увеличение производительности при использовании ISNULL по сравнению с OR @p IS NULL. Не то чтобы я выступал за использование ISNULL , потому что увеличения производительности (которое в лучшем случае крайне незначительно, а в худшем случае - очень специфические случаи), но приятно знать, что оно не имеет значительных затрат , Честно говоря, я не уверен, почему это так или иначе будет иметь значение, но план выполнения показывает разницу в стоимости фильтра на 1%.