SQL Server DELETE и SELECT ведут себя по-разному с тем же предложением WHERE

У меня есть таблица, которая заполняется ежедневным запланированным заданием, которое удаляет данные за последние 7 дней, а затем повторно заполняется данными из другого источника (мэйнфрейма) за последние 7 дней.

Недавно пользователи сообщили о нескольких дубликатах, относящихся к началу октября 2011 года. ...в размере сотен тысяч строк.

Я заметил странное поведение при удалении, которое выполняется для каждого задания:

DELETE FROM fm104d 
 WHERE location = '18'
   AND (CONVERT(datetime,CASE WHEN ISDATE(pull_date)=0 THEN '19000101' 
                 ELSE pull_date END)) >  DATEADD(day, -7, getdate())

Вышеупомянутое возвращает «(затронутых строк: 0)».

Когда я выполняю указанное выше после замены DELETE на SELECT *, я получаю взамен 32 000+ строк.

Почему SELECT и DELETE ведут себя по-разному?

UPDATE

Вот фактический план выполнения:

http://pastie.org/2869202

18
задан Mark Bowytz 15 November 2011 в 21:53
поделиться