Я думаю, оптимизатор считает, что это выгодно. Альтернативой может быть использование того же плана, как если бы вы написали
select * from History where hist_id=@x
union all
select * from History where @x is null
Вы можете переписать запрос таким образом, но я уверен, что оптимизатор способен сделать это сам по себе. Сколько у вас нулевых значений?
Редактировать: Оказывается, я неправильно прочитал вопрос и подумал, что вы хотели ГДЕ (@x = hist_id ИЛИ hist_id равен нулю). На самом деле вы хотите динамический критерий. Проверьте эту статью . Обратите внимание, что этот тип запроса должен был работать в SQL2k8, если вы указали WITH (RECOMPILE), но из-за неприятной ошибки эта поддержка была удалена.