С JOIN - формально правильнее для любой RDBMS. Производительности, как правило, хватает.
Но в некоторых РЕДКИХ случаях может вызвать проблемы производительности.
Вариант с одной таблицей (с дублями) - в таких РЕДКИХ случаях помогает решить проблему с производительностью. Но возможны косяки - из-за несинхронизирования дублирующей информации.
Но, как правило, проблема с производительностью лежит в другой плоскости.
Дублировать, на практике, приходится по другой причине, - ВОВСЕ не из-за производительности.
Например, интернет магазин:
Цены - могут поменяться.
Но в таблицу с заказанными уже товарами должно уехать (дублироваться) все по старому, то есть так цена, что была в момент оформления заказа покупателем. А вовсе не ссылка на таблицу с текущими ценами.