Разница между SQL NOT IN и NOT EXISTS при обработке NULL-значений заключается в следующем:
- NOT IN не вернёт записей для NULL-значений, поскольку NULL-значения не трактуются как сравниваемые. www.sql-ex.ru Даже если только одно значение в заданных данных равно NULL, весь результат будет пустым. www.datameer.com
- NOT EXISTS может обрабатывать NULL-значения. www.datameer.com Ему не важно, какие данные выбраны в подзапросе, он только возвращает TRUE или FALSE. www.datameer.com Если возвращается любая строка, то возвращается TRUE, если нет — FALSE. www.datameer.com
Таким образом, выбор между NOT IN и NOT EXISTS зависит от того, как нужно обрабатывать NULL-значения в запросе.