Differenze tra ISNULL e COALESCE

Scritto da  Antonio Giglio il venerdì 8 luglio 2011  •  Linguaggio:    • Livello: 100


In sql server ci sono due funzioni utilizzate per ritornare il primo valore non nullo da un'espressione.

  1. IsNull( check_expression , replacement_value )
  2. Coalesce( expression [ ,...n ] )

Coalesce è una funzione, aggiunta nello standard ANSI SQL-92, che si traduce in CASE…END.
Ad esempio il richiamo alla funzione COALESCE (V1, V2, . . . ,n ) si traduce come: CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2, . . . ,n ) END.

Differente è il caso di IsNull che è una funzione T-SQL ed accetta solo due parametri.

Il tipo di dati ritornato segue delle regole diverse:

  • la funzione IsNull utilizza il tipo di dato del primo parametro;
  • la funzione Coalesce invece segue le regole dettate dall'espressione CASE e ritorna il tipo  con maggiore priorità.

Un'altra differenza è relativa all'eventualità che tutti i parametri siano nulli, ovvero il risultato di SELECT IsNull(null,null) è un'espressione corretta che ritorna un tipo int nullo, mentre il risultato di SELECT Coalesce(null,null) ci ritorna un errore perchè sql server non è in grado di dare una priorità al tipo di dati.
Sempre a causa della maggiore priorità, il risultato di Coalesce([int], [decimal(19,2)]) è di tipo decimal(19,2) differentemente da IsNull([int], [decimal(19,2)]) che è di tipo int.
Non per ultimo il fattore delle performance che spesso sono peggiori nell'utilizzo di Coalesce.

Questo fa la differenza, nell'utilizzo di queste espressioni, in colonne calcolate, nella creazione di vincoli di chiave o se sono utilizzate come valore di ritorno di una UDF.


Tags: sql server,sql,T-SQL

 
x