Самое простое - это смотреть по смыслу этого поля. NULL хранить там, где мы заранее не знаем, какое значение там должно быть, или его не должно быть вообще у текущей записи. А 0 - там, где мы точно знаем, что это значение равно конкретно нулю (например, пустой баланс на счету, или счётчик, начавшийся с нуля и ещё не прибавившийся ни разу).