Stephen's answer gives you all the details, but I think your misconception or slight changes of wording is related to something else, the "IANA root".
ICANN oversees the running of the system, and plays no operational part (which is a simplification, as they technically run some root nameservers, and are also the "registry" of
.int, but this is tangential to your case).
ICANN has a direct contract with gTLD registries, but it still needs to manage a single hierarchy in which all TLDs fit in, because obviously there is a need of uniqueness. This is called the "IANA root". Because there have been multiple attempts in the past of people trying, for technical, political, philosophical, experiment, to define other roots, which would/could carry other TLDs.
This was called "alternate roots". They all failed for various reasons. Or at least the one trying to sell "new" TLDs, that would work only in the alternate root. There are still some alternate roots used for experiments, like the YETI Project
But the IANA root is described in RFC 2826: "IAB Technical Comment on the Unique DNS Root" which says in its summary:
The DNS name space is a hierarchical name space derived from a
single, globally unique root. This is a technical constraint
inherent in the design of the DNS. Therefore it is not technically
feasible for there to be more than one root in the public DNS.
That one root must be supported by a set of coordinated root
servers administered by a unique naming authority.
IANA was previously a specific service just maintaining this and other parameters for the IETF. After ICANN was built, IANA became a service inside ICANN. After latest ICANN evolutions, IANA is now more technically called "PTI" for "Public Technical Identifiers", see https://pti.icann.org/
It is a separate structure, in contract with ICANN, that manages the IANA functions.