NULL: il terzo valore di verità
Padroneggi il significato di NULL, scopra perché NULL non è uguale a nulla, nemmeno a sé stesso, e come la logica a tre valori influisce sulle clausole WHERE
NULL: il terzo valore di verità è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.
Che cos'è NULL?
NULL rappresenta dati sconosciuti o mancanti. Non è zero, non è una stringa vuota e non è false. Rappresenta esplicitamente l'assenza di un valore.
NULL non è uguale a nulla, nemmeno a se stesso
Questa è la regola che confonde tutti:
SELECT NULL = NULL; -- NULL (not true!)
SELECT NULL = 0; -- NULL
SELECT NULL = ''; -- NULL
SELECT NULL <> 1; -- NULLUtilizzare IS NULL e IS NOT NULL
Per verificare la presenza di NULL, è necessario utilizzare i predicati speciali IS NULL e IS NOT NULL:
SELECT email FROM users WHERE deleted_at IS NULL; -- active users
SELECT email FROM users WHERE deleted_at IS NOT NULL; -- deleted usersLogica a tre valori
La logica booleana SQL ha TRE valori: TRUE, FALSE e UNKNOWN (NULL).
| A | B | A AND B | A OR B |
|---|---|---|---|
| TRUE | NULL | NULL | TRUE |
| FALSE | NULL | FALSE | NULL |
| NULL | NULL | NULL | NULL |
WHERE elimina le righe il cui predicato è NULL
Se WHERE x = 5 restituisce NULL per una riga (perché x è NULL), quella riga NON viene restituita. Vengono conservate solo le righe per cui il predicato è TRUE.
-- Suppose age is NULL for some users:
SELECT * FROM users WHERE age >= 18;
-- Users with NULL age are NOT returned, even though we
-- don't actually know they're under 18.La trappola di NULL con NOT IN
Questa interrogazione restituisce ZERO righe se una qualsiasi delle righe secondarie contiene un nome NULL:
SELECT * FROM users
WHERE name NOT IN (SELECT excluded_name FROM blocklist);
-- If blocklist has a NULL row, the whole NOT IN evaluates to NULL
-- → no rows returned
-- Safer:
SELECT * FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM blocklist b WHERE b.excluded_name = u.name
);COALESCE: sostituire NULL con un valore predefinito
COALESCE restituisce il primo argomento non NULL:
SELECT id, COALESCE(full_name, email, 'Anonymous') AS display_name
FROM users;
-- If full_name is NULL, use email; if that's NULL too, use 'Anonymous'.NULLIF: l'opposto
NULLIF(a, b) restituisce NULL quando a = b, altrimenti restituisce a. È utile per trattare valori segnaposto come '' o 0 come NULL.
SELECT NULLIF(price, 0) FROM products;
-- Returns NULL when price is 0, useful for AVG() that should ignore zeros.NULL nelle funzioni di aggregazione
Le funzioni di aggregazione (tranne COUNT(*)) ignorano gli input NULL:
-- Suppose: prices = [10, 20, NULL, 30]
SELECT COUNT(*) FROM products; -- 4 (counts rows)
SELECT COUNT(price) FROM products; -- 3 (counts non-NULL prices)
SELECT AVG(price) FROM products; -- 20 (60 / 3, not 60 / 4)
SELECT SUM(price) FROM products; -- 60Ordinamento di NULL
Per impostazione predefinita, PostgreSQL ordina i valori NULL alla fine in ordine crescente e all'inizio in ordine decrescente. È possibile modificare questo comportamento:
SELECT * FROM users ORDER BY last_login_at DESC NULLS LAST;Memorizzare NULL o una stringa vuota
Decidete per ogni colonna: '' è un valore valido? Se non lo è, utilizzate NULL per indicare "nessun valore". Se invece lo è, NULL indica qualcosa di diverso (ad esempio "non ancora richiesto").
Siate coerenti: non utilizzate entrambi nella stessa colonna.
Riepilogo
NULL è un valore di verità a sé.
- Verificatelo con
IS NULL, mai con= NULL - I filtri WHERE conservano solo le righe TRUE
- Le funzioni di aggregazione ignorano gli input NULL
COALESCEè un prezioso alleato
Verifica rapida
Che cosa restituisce SELECT NULL = NULL;?
Domande Frequenti
La lezione «NULL: il terzo valore di verità» è gratuita?
Sì — il testo completo di «NULL: il terzo valore di verità» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.
Cosa imparerò in «NULL: il terzo valore di verità»?
Padroneggi il significato di NULL, scopra perché NULL non è uguale a nulla, nemmeno a sé stesso, e come la logica a tre valori influisce sulle clausole WHERE Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Academy?
Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «NULL: il terzo valore di verità»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Academy?
Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Che cos’è un RDBMS e perché le tabelle sono importanti
- Chiavi primarie e unicità
- NULL: il terzo valore di verità
- Panoramica dei tipi di dati: INT VARCHAR DATE BOOLEAN