isnull vs is null

后端 未结 10 1379
闹比i
闹比i 2020-12-06 00:13

I have noticed a number of queries at work and on SO are using limitations in the form:

isnull(name,\'\') <> \'\'

Is there a particul

10条回答
  •  盖世英雄少女心
    2020-12-06 00:30

    where isnull(name,'') <> ''
    

    is equivalent to

    where name is not null and name <> '' 
    

    which in turn is equivalent to

    where name <> ''
    

    (if name IS NULL that final expression would evaluate to unknown and the row not returned)

    The use of the ISNULL pattern will result in a scan and is less efficient as can be seen in the below test.

    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 <> '' */
    

    Which should give you the execution plan you need.

提交回复
热议问题