NULL означає відсутність, невідомість інформації. Значення NULL не є значенням в повному сенсі слова: за визначенням воно означає відсутність значення і не належить жодному типу даних. Тому NULL не дорівнює ні логічного значення FALSE, ні порожній рядку, ні нулю. При порівнянні NULL з будь-яким значенням буде отримано результат NULL, а не FALSE і не 0. Більш того, NULL не дорівнює NULL! Досить часто програмісти уникають null-значень і для нульових полів в базі виставляють значення за замовчуванням типу 0, '' (порожній рядок). По-перше, це неправильно з точки зору семантики: 0 все-таки означає наявність інформації. По-друге, використання подібних дефолтних значень може привести до помилок.
Припустимо, є табличка product, в якій зберігаються моделі ноутбуків. У кожної моделі є виробник, опис і ціна. Ціна може приймати null, тому що в момент додавання нового товару вона може бути невідома. Припустимо, необхідно обчислити середню вартість для ноутбуків hp. Коли всі ціни відомі, проблем не виникає.
1) У першому експерименті поле price матиме значення за замовчуванням '' (порожній рядок). Ціна моделі № 4 невідома (її значення 0 або ''). У цьому випадку середня ціна обчислюється не вірно, тому що в розрахунку враховується і ноутбук, який не має ціни.
avg = (400 + 300 + 500 + 0) / 4 = 300
2) У другому експерименті поле price має значення null. В цьому випадку база ігнорує null-значення при угрупованню. Середнє значення вираховується без урахування моделі № 4, у якій невідома ціна.
avg = (400 + 300 + 500) / 3 = 400
Таким чином, використовуйте null-значення там, де вони дійсно потрібні за змістом.
можна було в запиті написати IS NOT NULL
Можна використовувати в запиті більш правильне умова
price is not null and price> 0
А ще краще не об'єднувати в одній таблиці сам ноутбук і його ціну. Адже це різні сутності, вірно? І реалізовані вони повинні бути в різних таблицях, тоді не виникне питання про використання null або нульових значень в такому ракурсі