I’m more familiar with DB2 and SQL Server, but according to the Oracle document below, which aligns with how I understand and use relational databases at my day job and within glide, relations are much more than a one to one check for a match in a single row. They can be a one-to-one, one-to-many, many-to-one, many-to-many. In more cases than not, I expect to have more than one resulting row from a relation. A well designed database does not duplicate any data, other than the unique keys used to create a relational link between a parent record and the children records. That way, common data can be shared across other multiple rows of data, through the relation, without the need to actually duplicate the data.
https://docs.oracle.com/html/E79061_01/Content/Data%20model/Define_a_relationship.htm
I don’t feel that glide is doing anything beyond what any other traditional relational database would do. When you create a relation in glide, your are simply asking, “does the value in this column, in this row, have any matches in the destination column, in ANY of the rows of the destination table…and if so, return ALL of those matching rows”. This check happens for every row in the source table, so in some cases, a relation could return 0, 1, or several related row records depending on how many related matches it finds.
I think the confusing thing here is that you have a self relation back to the same table. That is usually not the typical use case for a relation. I sometimes do self relations because I want to display details about that same row in a tile or card inline list with a single matching row…but that’s an entirely different use case and more for crafting a UI look instead of additional functionality.
When you asked about this several weeks ago, you wanted to mark a user as an admin, but also show a list of all related users to the admin. The proper relation you need is to link the user-club-admin column to the user-club column. This will give you a multiple relation with all of the users in that particular club, but only the admin row will find the multiple matches. For the rest of the users, the user-club-admin value in their row will never find a match in the user-club column, so the relation will always remain empty for non-admin users. Then you can just use the relation as the source of an inline list when the admin is viewing their own details. The admin will see all related users in their club.
Now it also appears that your boolean is checking if the relation is empty or not. This should still work in this case, but you really could shortcut it and just check if user-club-admin equals user-club. It would still only be true for the admin.