È arrivato il momento di parlare un po' più a fondo di NULL. E non è una chiacchierata vuota, anche se il nostro protagonista sembra... il nulla. Se una tabella fosse una casa, NULL sarebbe il suo fantasma: silenzioso, misterioso e imprevedibile. Sembra esserci, ma non risponde alle domande, non partecipa ai conteggi, evita i confronti. Non è semplicemente "vuoto" — è "non si sa niente".
Nel mondo SQL NULL non è zero, non è una stringa vuota e non è "nessun dato" nel senso classico. È un segno speciale di incertezza, con cui bisogna andare cauti. Oggi vediamo perché NULL non è solo un ospite strano, ma un partecipante fondamentale in ogni database. Infatti significa proprio "valore sconosciuto o non definito".
In cosa NULL è diverso da una stringa vuota o dal numero 0?
Tanti principianti confondono NULL con altri valori, tipo la stringa vuota '' o il numero 0. Vediamo le differenze chiave:
| Concetto | Valore |
|---|---|
NULL |
Assenza totale di valore. Non è solo una scatola vuota, è proprio l'assenza della scatola |
| Stringa vuota | È una stringa che semplicemente non ha caratteri. Per esempio: '' |
Numero 0 |
Un valore che rappresenta il numero zero, proprio zero |
Esempio dalla vita reale: immagina di avere una tabella dei dipendenti e di salvare i loro stipendi. Se lo stipendio è 0, vuol dire che a quella persona non è stato pagato nulla. Se invece lo stipendio è NULL, semplicemente non sai quanto prende (o non è ancora stato deciso).
Come interpretare NULL
Ora che abbiamo già un'idea di cosa sia NULL, vediamo come SQL ci lavora. La cosa più importante su NULL si può riassumere in una frase: NULL non è uguale a niente e non è diverso da niente, nemmeno da se stesso.
SELECT NULL = NULL; -- Risultato: FALSO
Sorpresa! Perché succede? Perché NULL è incertezza. Se hai due valori sconosciuti, non puoi dire che sono uguali, ma nemmeno che sono diversi.
Vediamo qualche esempio:
Esempi di operazioni con NULL
SELECT NULL + 1; -- Risultato: NULL
SELECT NULL * 100; -- Risultato: NULL
SELECT NULL = 0; -- Risultato: FALSO
SELECT NULL <> 0; -- Risultato: FALSO
NULL in una somma, una moltiplicazione o qualsiasi altro calcolo restituisce sempre NULL. Qui NULL non si comporta come lo zero in matematica. È come buttare qualcosa nel vuoto e il vuoto si mangia tutto.
Esempi pratici
Immagina la tabella students con le info sugli studenti:
| id | name | birth_date | grade |
|---|---|---|---|
| 1 | Alice | 2000-01-01 | 85 |
| 2 | Bob | NULL | 90 |
| 3 | Charlie | 1999-05-22 | NULL |
| 4 | Diana | NULL | NULL |
Esempio 1: Influenza di NULL nelle condizioni
Se proviamo a trovare tutti gli studenti senza data di nascita, mettendo la condizione WHERE birth_date = NULL:
SELECT *
FROM students
WHERE birth_date = NULL;
Non otterremo nessun risultato, perché NULL = NULL restituisce FALSO. Per controllare se un valore è NULL bisogna usare IS NULL:
SELECT * FROM students WHERE birth_date IS NULL;
Risultato:
| id | name | birth_date | grade |
|---|---|---|---|
| 2 | Bob | NULL | 90 |
| 4 | Diana | NULL | NULL |
Esempio 2: Influenza di NULL nei calcoli
| id | name | birth_date | grade |
|---|---|---|---|
| 1 | Alice | 2000-01-01 | 85 |
| 2 | Bob | NULL | 90 |
| 3 | Charlie | 1999-05-22 | NULL |
| 4 | Diana | NULL | NULL |
Se proviamo a calcolare la media dei voti di tutti gli studenti:
SELECT AVG(grade) FROM students;
Il risultato sarà: 87.5. Perché? Perché NULL viene ignorato nelle funzioni di aggregazione come AVG, SUM, MIN, MAX. Ma occhio! Se vuoi considerare anche le righe con NULL, dovrai fare qualche trucco in più.
Vedremo più in dettaglio come lavorare con NULL nelle prossime lezioni.
GO TO FULL VERSION