In reality both are true. If you’re doing complex business logic on low cardinality tables, joins win every time. If you’re doing simple retrievals on high cardinality tables, they’re not.
The trick for scaling is figuring out which your use case is and converting between the two as necessary. Maybe one database for editing and one for publishing/serving.
There are rare cases that are high data complexity and high cardinality. Normally these can actually be pushed into one of the other formats, but when they can’t, sharding can often be a good option.