Non sa quale sarà il valore delle variabili quando compila la query. Potresti provare OPTION (RECOMPILE)
.
Presumo che l'aggiunta di AND
La clausola nella query (anche se logicamente non la rende affatto più selettiva) deve indurre l'ottimizzatore a stimare la query con maggiore selettività dandoti così il piano che volevi!
Nei commenti dici che la versione senza ExceptionDate = ExceptionDate
è stimato in 88234.8
righe e la versione con 8823.48
In genere, in assenza di statistiche utilizzabili, SQL Server ricorre all'euristica dipendente dal tipo di operatore di confronto nel predicato.
Presuppone che un >
predicato restituirà ad esempio il 30% delle righe e che un =
predicato restituirà il 10% delle righe, quindi sembra che lo stia semplicemente applicando direttamente al risultato della prima stima. Interessante che non tenga conto del fatto che il pari è contro la colonna stessa qui!
cfr Best practice per la gestione delle statistiche:evitare l'uso di variabili locali nelle query