Так, наконец-то интересный диалог, поэтому распишу свое мнение)))
Я считаю, что мусора вообще не должно быть в БД. Нужно всё валидировать еще на входе, нужно обмазаться CHECK CONSTRAINT'ами, чтоб никто не смог пропихнуть ничего невалидного, нужно чтобы данные были только правильными. Нужно бить по голове любого, кто пытается пропихнуть неправильные данные, и валиться эксепшонами на голову слишком настойчивым, а не писать так, чтобы код работал "правильно" при неправильных данных.
Но я считаю, что если данные очевидно опциональные, то они могут быть NULL. Только ЯП должен уметь описать опциональный тип. И нужно чтобы опциональность данных была очевидна и видна за километр.
NULL как опциональное значение очевиднее чем "" потому что непонятно - "" это данные или отсутствие данных