What is the difference between a room ID with a ! or a # from another server's perspective (and other questions)?
What is the difference between a room id of !example391:server.com and #example:server.com for a user at server2.com? Is there also a way to assign an internal address starting with a #? Everytime I try to make it internal only, it becomes external at the same time. I also noticed that Element allows me to assign custom room addresses from different servers, how would that be possible?
Room IDs are the main identifier for a room, while one or more aliases can also be assigned to it for discovery purposes.
Any server can assign aliases - and therefore also serve the room discovery, but only if the room admins allow them.
Using the Matrix HQ room as an example; #matrix:matrix.org is the canonical alias for the room, mapping to !OGEhHVWSdvArJzumhm:matrix.org.
If you want to join the room, you either need to know the ID and some information on which servers are currently part of the room, or you need to know a room alias - which can be used to query the server owning it in order to receive the information on the room and how to join it.
For example; (%23 is the HTTP entity for #, since # would otherwise be handled as a client part of the URL)