When things begin at 0, it's often because they're abstracting an offset baked into the data structure - array[0] is 0 steps from the start of the array, array[4] is 4, etc.
Databases aren't storing things based on offsets, they're mystical and strange under the hood (by design - we worry about the schema, the database engine worries about the implementation). IDs are meant to be unique and that's about it. As mentioned by someone else, it's probably best if we don't use a value like 0 that can be misinterpreted.