What normalisation buys
One place to change each fact. Duplicated data drifts, and drifted data produces reports nobody trusts.
When denormalising is right
Read-heavy paths where the join is genuinely expensive and the duplicated value rarely changes. Order totals and counters are the classic examples.
The obligation you take on
Every denormalised value needs a defined update path and a way to detect drift. Add both at the same time, or the shortcut becomes a bug.