What is the point of Zero Address check?

Why do almost all contracts require address != address(0)

What's the point?

Is it to prevent mistakes?

I think this depends on your function.
For example, in the Ownable contract, there is a function transferOwnership, it has require(newOwner != address(0), so it prevents users to transfer ownership to a zero address mistakenly, if users want to disable owner role, they are expected to call renounceOwnership().
But on the other hand, users can transfer to address(0x1) mistakenly to loss the ownership, so in this situation, maybe this requirement is useless, and it costs more gas to check at the same time. But in the Ownable2Step contract, the same function transferOwnership does check zero address, it is a two-step procedure to transfer ownership.