I feel like the default for behaviour for join two things to inherit the last selected colour is okay. But I see what you mean - if you’ve defined a subsurface colour, that should be retained right.
Hello - in Join, the properties of the first thing selected wins - if there is a preselection, then all bets are off and the one that comes first in the object list wins. But per-face color should survive either way.