Valori Null
Un valore NULL indica che il valore è sconosciuto. Questo tipo di valore è diverso da un valore zero o vuoto. Non esistono due valori Null uguali. I confronti tra due valori Null o tra un valore NULL e qualsiasi altro valore restituiscono UNKNOWN in quanto ogni valore NULL è sconosciuto.
In genere, i valori Null indicano dati sconosciuti, non applicabili o che verranno aggiunti in seguito. È possibile, ad esempio, che l'iniziale del secondo nome di un cliente non sia nota nel momento in cui il cliente emette un ordine.
Di seguito sono disponibili informazioni relative ai valori Null.
Per verificare i valori Null in una query, utilizzare IS NULL o IS NOT NULL nella clausola WHERE.
Quando i risultati della query vengono visualizzati nell'editor del codice di SQL Server Management Studio, i valori Null vengono indicati come NULL nel set di risultati.
È possibile inserire valori Null in una colonna specificando esplicitamente NULL in un'istruzione INSERT o UPDATE, lasciando la colonna all'esterno dell'istruzione INSERT oppure, quando si aggiunge una nuova colonna a una tabella esistente, utilizzando l'istruzione ALTER TABLE.
Non è possibile utilizzare i valori Null nel caso di informazioni necessarie per distinguere due righe di una tabella, ad esempio le chiavi primarie.
Nel codice di un programma è possibile verificare la presenza di valori Null in modo che alcuni calcoli vengano eseguiti solo sulle righe che includono dati validi, ovvero non NULL. In un report, ad esempio, è possibile stampare la colonna del codice fiscale solo se include dati non NULL. La rimozione dei valori Null prima dell'esecuzione di calcoli può essere utile in quanto è possibile che alcuni calcoli, ad esempio una media, non vengano eseguiti correttamente se si includono colonne con valori NULL.
Se è probabile che i dati includano valori Null indesiderati, è consigliabile creare query e istruzioni per la modifica dei dati che consentano di rimuovere tali valori o trasformarli in valori di altro tipo.
Importante |
---|
Per ridurre al minimo le operazioni di manutenzione e i possibili effetti sulle query o sui report esistenti, è consigliabile utilizzare i valori Null il meno possibile. Pianificare le query e le istruzioni per la modifica dei dati in modo che l'effetto dei valori Null sia minimo. |
Se i dati includono valori Null, gli operatori logici e di confronto possono restituire potenzialmente un terzo valore, ovvero UNKNOWN, anziché TRUE o FALSE . Questa logica a tre valori, anche se necessaria, è causa di numerosi errori nelle applicazioni. Nelle tabelle riportate di seguito viene descritto il risultato ottenuto dal confronto tra valori Null.
Nella tabella seguente viene descritto il risultato ottenuto quando si applica l'operatore AND a due operandi booleani.
AND |
TRUE |
UNKNOWN |
FALSE |
---|---|---|---|
TRUE |
TRUE |
UNKNOWN |
FALSE |
UNKNOWN |
UNKNOWN |
UNKNOWN |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
Nella tabella seguente viene descritto il risultato ottenuto quando si applica l'operatore OR a due operandi booleani.
OR |
TRUE |
UNKNOWN |
FALSE |
---|---|---|---|
TRUE |
TRUE |
TRUE |
TRUE |
UNKNOWN |
TRUE |
UNKNOWN |
UNKNOWN |
FALSE |
TRUE |
UNKNOWN |
FALSE |
Nella tabella seguente viene illustrato il modo in cui l'operatore NOT nega, ovvero inverte, il risultato di un operatore booleano.
Espressione booleana a cui viene applicato l'operatore NOT |
Restituisce |
---|---|
TRUE |
FALSE |
UNKNOWN |
UNKNOWN |
FALSE |
TRUE |
Lo standard ISO utilizza le parole chiave IS NULL e IS NOT NULL per verificare la presenza di valori Null.
Espressione booleana a cui viene applicato l'operatore IS NULL |
Restituisce |
Espressione booleana a cui viene applicato l'operatore IS NOT NULL |
Restituisce |
---|---|---|---|
TRUE |
FALSE |
TRUE |
TRUE |
NULL |
TRUE |
NULL |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
Transact-SQL offre inoltre un'estensione per l'elaborazione di valori Null. Se l'opzione ANSI_NULLS è impostata su OFF, i confronti tra valori Null, ad esempio NULL = NULL, restituiscono TRUE mentre i confronti tra un valore NULL e qualsiasi altro dato restituiscono FALSE.