Originariamente inviato da GiosinoSPS
Allora mettiamola così: quando voi settate un campo come NOT NULL, a che scopo lo fate, cosa volete ottenere?
Guarda che di norma i campi si settano NOT NULL. Cioe' un campo deve essere presente e valutato anche se fosse vuoto oppure valorizzato con un default.

L'uso di NULL serve per avere conteggi o statistiche, comunque in casi in cui sia ben chiaro che esista la possiblita' che un campo sia NULLO. Tra l'altro il campo NULL comporta maggior costo elaborativo, maggior spazio occupato di un campo NOT NULL vuoto.

Ripeto ancora una volta:

NULL il campo non esiste, non e' presente se non viene valorizzato.

NOT NULL il campo e' sempre presente. E questa e' la condizione di uso normale.

Quello che tu fraintendi e' l'assioma NULL = VUOTO. Cosi' NON e'.

se fai una SELECT e vuoi trovare i campi NULL dovrai scrivere:

WHERE campo = NULL

Se invece vuoi trovare i campi VUOTI dovrai scrivere:

WHERE campo = ''

e non ti compariranno i campi NULL, perche' per la query non esistono. Per vederli li devi richiamare in modo specifico ... where campo = NULL......

Quindi per rispondere infine alla tua domanda ... NOT NULL si utilizza quando si vuole che il campo sia sempre presente nella gestione delle tuple anche nel caso fosse FALSE o VUOTO.