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