'\0' e 0 sono perfettamente identici, infatti la sequenza di escape '\numero' si traduce semplicemente come numero (dove numero viene considerato come unsigned char).
NULL invece non mi pare che sia necessariamente uguale a '\0', e comunque un libro che ho letto sostiene che è un simbolo concettualmente diverso; se il carattere NUL ('\0' o 0 o ^@ o quello che vuoi) rappresenta il terminatore delle stringhe ASCIIZ la costante NULL invece è il valore da assegnare ai puntatori non inizializzati.