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>