where isnull(name,'') <> ''
est équivalent à
where name is not null and name <> ''
qui à son tour est équivalent à
where name <> ''
(si le nom IS NULL
cette expression finale serait évaluée comme inconnue et la ligne non renvoyée)
L'utilisation du ISNULL
entraînera un scan et est moins efficace comme on peut le voir dans le test ci-dessous.
SELECT ca.[name],
[number],
[type],
[low],
[high],
[status]
INTO TestTable
FROM [master].[dbo].[spt_values]
CROSS APPLY (SELECT [name]
UNION ALL
SELECT ''
UNION ALL
SELECT NULL) ca
CREATE NONCLUSTERED INDEX IX_TestTable ON dbo.TestTable(name)
GO
SELECT name FROM TestTable WHERE isnull(name,'') <> ''
SELECT name FROM TestTable WHERE name is not null and name <> ''
/*Can be simplified to just WHERE name <> '' */
Ce qui devrait vous donner le plan d'exécution dont vous avez besoin.