I'm not sure what we consider an authoritative source but relational algebra does define the results of semi and anti joins as only containing rows from main relation. https://en.m.wikipedia.org/wiki/Relational_algebra Given that this is largely internals (aside from the plan explanations themselves) I guess we can punt for now but calling an inner or outer join a semijoin in this case relies on a non-standard definition of semijoin - namely that it is an optimized variation of the other joins instead of a join type in its own right. This is complicated further in that we do implement a true semijoin (using exists) while we allow for an anti join to be non-standard if expressed using "left join ... is null" instead of via "not exists". Calling these optimizations outer/inner+semi/anti preserves the ability to distinguish these versions from the standard definitions. I do like ithe idea of it being exposed and encapsulated as a distinct join type instead of being an attribute. David J.