Non c'è niente di sbagliato nell'usare CHAR o VARCHAR come chiave primaria.
Sicuramente in molti casi occuperà un po' più di spazio di un INT, ma ci sono molti casi in cui è la scelta più logica e può anche ridurre il numero di colonne necessarie, migliorando l'efficienza, evitando la necessità di avere un campo ID separato.
Ad esempio, i codici paese o le abbreviazioni di stato hanno già codici di caratteri standardizzati e questo sarebbe un buon motivo per utilizzare una chiave primaria basata su caratteri piuttosto che creare un ID intero arbitrario per ciascuno in aggiunta.