As far as I am aware, "real" PIDs are always >= 1. As is typically the case, "0" basically corresponds to a NULL value, i.e. "no process," or at least, "no PID." (Basically, you need to have some value that corresponds to "nothing at all," and zero is traditionally "it.")
I'm sure that various systems will vary on this ... no one's holding a gun to any kernel-designer's head and saying that they can't use zero if they want to ... but I would speculate that, if I did see a zero, it would probably correspond to a "phony" process-table entry, e.g. some part of the kernel that I can't actually talk-to or reference in any way.