Зависит от того, что такое "совпадают". NULL может быть представлен как 0 в машинном коде, но при этом может отсутствовать возможность использовать его там, где можно использовать целое число из-за ограничений типов на этапе компиляции. Т.е. это может быть другой тип (указатель) и может быть (в языке или компиляторе) ограничение на использование указателей в качестве целых чисел и наоборот. А где-то таких ограничений может не быть. Такую сомнительную фичу языка называют арифметикой указателей. Если не ошибаюсь, в Си изначально NULL вообще был макросом со значением 0.
Ничто может быть представлено более экзотическими способами: с помощью run-time-типов, каких-нибудь флагов, на что только хватит фантазии у авторов.