Ora capisco la logica di questa porzione di codice
select * from dbo.tab1 where c1 not in (select c1 from tab2)
Se la seconda select restituisce una serie di valori tra cui compare anche un solo NULL (valore sconosciuto), il where specifica tutto ciò che non è contenuto nel risultato della select precedente per cui il risultato è per forza NULL in quanto indeterminato.
In questo caso invece:
SELECT Matricola, Cognome FROM studente
WHERE (DataLaurea IS NULL AND DataIscrizione + INTERVAL 6 YEAR < current_date())
OR (DataIscrizione + INTERVAL 6 YEAR < DataLaurea)
Se il valore dell'attributo
DataLaurea di un record contiene NULL il risultato della disuguaglianza è NULL per cui mi ritrovo peril singolo record la seguente condizione:
(DataLaurea IS NULL AND DataIscrizione + INTERVAL 6 YEAR < current_date())
OR NULL
per cui vengono ricercati solo i ricordi che soddisfano la prima condizione?