ИМО, не должны, даже если могут. Таблицы фактов, как правило, огромные, с потенциально многими миллиардами строк и содержат измерения с определенным размером.
Связывание двух или более таблиц фактов может потребовать объединения нескольких миллиардов таблиц строк, что будет слишком дорого.
Если вам нужно связать факты в разных таблицах фактов (все измерения являются общими), лучше выполнить объединение только один раз, сохраняя результаты и используя вместо этого полученную таблицу. Еще лучше, если это можно сделать на уровне ETL, где вы можете присоединиться к пакету за пакетом.
Если вы объединяете факты в две таблицы, в которых измерения одного из них являются надмножеством другого, вам лучше объединить наиболее детализированные факты с гранулярностью другого и применить решение, описанное выше.
Если ни один из наборов измерений не является надмножеством другого, вам может потребоваться агрегировать оба на общем уровне.
Причина моей позиции в том, что я предпочел бы иметь избыточность в хранилище и избегать вычислений времени запроса, а не заставлять моих пользователей долго ждать, пока эти объединения дадут результаты. Кроме того, для очень больших объединений требуется много памяти, которая обычно дороже, чем хранилище.
Наконец, помните, что DWH обычно имеет данные, загруженные процессами ETL. Они запускаются в пакетном режиме и могут проверять согласованность при каждом запуске, в отличие от OLTP, где предотвращение многократной записи одних и тех же данных имеет первостепенное значение для предотвращения несогласованности.
Мнения по этому вопросу различаются, и вы, скорее всего, получите разные мнения по этому вопросу. В конце концов, оба подхода имеют свои плюсы и минусы, изучите оба и выберите тот, который вам наиболее удобен.