If you create an ezobject:// link with a bad object ID and store the draft, you get properly warned that the object ID does not exist.
However, from that point forward, an entry in ezcontentobject_link has been created that will never go away.
(It will, if you discard the draft at this point. But if you remove the link and publish the draft, the bad entry stays in the table. Each new published object version adds a new bad entry. Removing the object (not move to trash) removes the bad entry. - Gunnstein)
This will cause problems moving forward – you will get exceptions in the new stack if you use $repository->getContentService()->loadRelations().
In those cases, unless you manually delete the entry in ezcontentobject_link, a content editor will never be able to fix the problem.