As a software developer, I have a solid understanding of relational databases and normalization and have designed many. But what is the best or most pragmatic answer to the whole debate of 'when to use the real candidate key, when to use an identity PK', and the byproduct concerns around joining on keys that are strings (varchar) as opposed to an identity?