Those are different object types that belong to different tables and hence can have same primary key ID.
–> Even though these are different types, all are being stored in one table i.e. wp_posts
with post_type
= the different types. Check the table structure for clarity. So there won’t be any same ID conflict.
if we take a look at the functions used to get or check terms, they all lack object_type parameter.
–> This is not needed. When we have the object itself, WordPress functions can better decide its associated type from the DB.
As a matter of fact, there is no reference to object type in term_relationships table at all, and you are going to get false positives for objects with same IDs.
–> This is also wrong assumption. There is clear relationship between the tables need to manage the categorizations in WordPress. Here is a snap that explains relationships.