Ele não sabe qual será o valor das variáveis quando compilar a consulta. Você pode tentar
OPTION (RECOMPILE) . Presumo que a adição do
AND cláusula na consulta (mesmo que logicamente não a torne mais seletiva) deve induzir o otimizador a estimar a consulta com maior seletividade, dando a você o plano que você queria! Você diz nos comentários que a versão sem o
ExceptionDate = ExceptionDate é estimado em 88234.8 linhas e a versão com 8823.48 Geralmente, na ausência de estatísticas utilizáveis, o SQL Server retorna à heurística dependendo do tipo de operador de comparação no predicado.
Ele assume que um
> predicado retornará 30% das linhas, por exemplo, e que um = o predicado retornará 10% das linhas, então parece que está apenas aplicando isso diretamente ao resultado da primeira estimativa. Interessante que não leva em conta o fato de que o igual é contra a própria coluna aqui! c.f. Práticas recomendadas para gerenciar estatísticas - Evite o uso de variáveis locais em consultas a>