JOIN spowalnia i to jest fakt. Ale żeby w MySQL było to problemem muszą być spełnione dwa warunki:
- duża tabela np. users
- bardzo duża redundancja
A żeby opłacało się przenosić np. "adres" do innej tabeli musi być spełniony jeszcze jeden warunek:
- mała tabela joinowana - bo join dużej tabeli do małej to kompletne nieporozumienie
Np. opłacałoby się to gdybyśmy mieli dużą tabelę users i w niej nazwę województwa, typu "dolnogórnośrodkowonowosądeckie", województw mało a nazwa długa więc aż się prosi oddzielna tabela...
I argumenty typu "zwiększanie rozmiaru tabeli" nie mają dziś racji bytu, bo przestrzeń dyskowa nie jest dziś problemem, lecz wydajność. Dlatego redundancja często jest celowa, np. dodawanie pseudonimu użytkownika (oprócz id) żeby nie joinować dużej tabeli users do jakiejś niewielkiej typu bohomazy

I sztuka sztuką ale wydajność ma priorytet.