Hosts and groups are always ‘global’. If you define a host or group more than once under different ‘branches’ or ‘instances’, the host or group remains the same entity. Defining a host or group more than once either adds new information to it or overwrites any conflicting information with the latest definition.
Does that mean that each host and group names must be “completely” unique ?
Yes, inventory host names and host group names are unique.
It’s confusing (at first) because there’s so much flexibility in how you can define groups in hierarchies. But those hierarchies are for your benefit; they don’t actually exist as far as a running play is concerned. Once your inventories are parsed, refined, augmented, merged, and presented to a play, there are only two things left:
a dict where all the host names are the keys, and each value is a flat list containing all the groups the keying host is a member of, and
a dict where all the keys are the group names, and each value is a list containing all the hosts that are members of the keying group.
That’s it! Host groups are “flat” – i.e. they don’t “contain” sub-groups, and each group name is unique. Any group hierarchies exist only in our imaginations.