а как они оптимизируют эти джойны (субд)?
индексы, кэш как минимум. Вообще оперции джойна на сервере имеют смысл только в таких языках как Си, Rust, Golang, C++, Haskell. И то только по причине хорошего умения в асинхрон + многопоток и дикую скорость самих приложений. Но, обычно и там не страдают джойном таблиц на сервере.