In SQL Server, we can use
the ISNULL function or COALESCE function to check the null value for a column
or variable. 
Both functions are doing the same thing but they have some
characteristics which are disagree with each other. In this section, we are
going to differentiate both functions as –
ISNULL is
  known as SQL-ANSI non-standard function which is not feasible across database
  platforms and it is Sybase/SQL Server specific only. 
 | 
  
COALESCE
  is known as SQL-ANSI standard function which is portable across database
  platforms and cross limits to use freely. 
 | 
 
It’s a
  bit more limited in the sense that it supports only two inputs. ISNULL seems
  easier to read since it seems clearer what it’s doing inside because ISNULL  is the same as the first argument. 
 | 
  
It’s more
  advanced in the sense that it supports only n-number inputs and returns the
  first Not null expression among its arguments or we can say that COALESCE is
  the highest according to datatype precedence. 
 | 
 
ISNULL
  is an internal engine function and usually used because it's more predictable. 
 | 
  
COALESCE  is internally based on the CASE expressions and COALESCE is harder to spell,
  but doesn't lead to incorrect assumptions. 
 | 
 
Due to
  SQL-ANSI non-standard nature, it’s more flexibility. Performance wise is faster
  but more limited due to having only 2 arguments.  
 | 
  
COALESCE
  has a lot of flexibility due to having n-number of arguments but performance
  wise is slower than ISNULL. 
 | 
 
ISNULL
  has to deal with a fixed number of input variables (2). 
 | 
  
COALESCE
  has to be designed to work with any number of variables, so this will
  invariably involve extra computations.  
 | 
 
Syntax 
ISNULL(check_expression,
  replacement_value)  
Returns
  the same type as check_expression. 
SELECT  
ISNULL(CAST(NULL AS INT), 235.5)  
-- Returns 235 
SELECT  
ISNULL(CAST(NULL AS VARCHAR(5)), 'Hello Ryan') 
-- Returns value within specified length as Ryan 
 | 
  
Syntax 
COALESCE(
  expression [ ,...n ] )  
Returns
  the data type of the expression with the highest data type precedence. 
SELECT COALESCE(CAST(NULL AS INT), 235.5)  
-- Returns 235.5  
SELECT COALESCE(CAST(NULL AS VARCHAR(5)), 'Hello Ryan') 
-- Returns all value as Hello Ryan 
 | 
 
Conclusion
Generally, it is
recommended to stick to standard features unless there’s some flexibility or
performance advantage in the non-standard feature that is a higher priority.
ISNULL is actually more limited than COALESCE, so generally, it is recommended
to stick to COALESCE.
Hello Mukesh, thanks for your comment on my article Difference between ISNULL and COALESCE in SQL SERVER. I see you have also shared very good information.
ReplyDeleteKeep it up.
Very informative article. Once typo in illustration:
ReplyDeleteSELECT
ISNULL(CAST(NULL AS VARCHAR(5)), 'Hello Ryan') return "Hello" not "Ryan" as mentioned above. Thanks for that information.