Самая распространенная причина низкой производительности для этого типа запроса заключается в том, что оптимизатор не может быть уверен, какое значение @due_date_limit будет для большинства запросов. Часто план, сгенерированный и повторно используемый последующими исполнениями, благоприятствует случаю, когда значение равно нулю.
Начиная с SQL 2005, вы можете направлять оптимизатор, используя опцию «OPTIMIZE FOR»: -
WHERE a.is_active = 1
AND b.due_date <= ISNULL(@due_date_limit, b.due_date)
OPTION (OPTIMIZE FOR (@due_date_limit = '09/01/2009'))