Правильно ли я понимаю, что лучше всего использовать NOT NULL везде, где только можно? Я понимаю, что NULL иногда необходим (например, когда мы добавляем товар на сайт, а цену ещё не знаем - это поле можно сделать NULL), но если смотреть на картину в целом, то как лучше поступить?
Лучше поступить так, как того требует бизнес-логика. Если цены может не быть — очевидно она должна быть NULL. Потому что 0 и NULL — совершенно разные значения: "бесплатно" и "цены нет", из чего следует, что в первом случае товар продаётся за бесплатно, а во втором может не продаваться.