そもそも、規格でのNULLの定義は、C++の場合「処理系定義の空ポインタ定数」となっている。
つまり0である必要性はなく、例えばGCCでは#define NULL __nullとなっている。
__nullはポインタ型へは暗黙の変換が可能だが、整数型へ暗黙の変換を行うと警告になる独自拡張の定数。

あと、NULLではなく0でいいだろと言っているのはBjarne。
だからC++にはNULL使わない派もそれなりにいる。どれくらいいるのかは知らないけど。
少なくとも、俺もその内の1人。