Sim, causa varreduras de tabela. (embora pareça ser otimizado se a coluna não for realmente anulável)
O SR0007 A regra é um conselho geral extremamente ruim, pois torna o predicado inargável e significa que quaisquer índices na coluna serão inúteis. Mesmo que não haja índice na coluna, isso ainda pode tornar as estimativas de cardinalidade imprecisas, afetando outras partes do plano.
A categorização dele no
Microsoft.Performance A categoria é bastante divertida, pois parece ter sido escrita por alguém sem compreensão do desempenho da consulta. Afirma que a razão é
Embora a expressão em si seja avaliada como
unknown seu código retorna um resultado completamente determinístico quando você entende que qualquer = , <> , > , < etc comparação com NULL avaliar como Unknown e que o WHERE cláusula retorna apenas linhas onde a expressão é avaliada como true . É possível que eles signifiquem se
ANSI_NULLS
está desligado, mas o exemplo que eles dão na documentação de WHERE ISNULL([c2],0) > 2; vs WHERE [c2] > 2; não seria afetado por esta configuração de qualquer maneira. Esta configuração Planos de execução mostrando varreduras versus busca ou abaixo
CREATE TABLE #foo
(
x INT NULL UNIQUE
)
INSERT INTO #foo
SELECT ROW_NUMBER() OVER (ORDER BY @@SPID)
FROM sys.all_columns
SELECT *
FROM #foo
WHERE ISNULL(x, 10) = 10
SELECT *
FROM #foo
WHERE x = 10
SELECT *
FROM #foo
WHERE x = 10
OR x IS NULL