Os resultados que você obtém são esperados. Você deve ter um id diferente para C++ e isso levaria aos resultados desejados.
Você precisa adicionar uma coluna de ID no
B
tabela que você usaria no C
tabela (como uma chave estrangeira) para que você possa filtrar os resultados. Corrigir esse problema de design de banco de dados ajudará você a resolver esse problema, pois seu design atual é falho.
A consulta resultante deve ser semelhante a:
SELECT *
FROM A
LEFT OUTER JOIN B ON A.id = B.pid
LEFT OUTER JOIN C ON A.id = B.pid AND C.newForeignKeyId=B.newId;
Além disso, eu recomendaria usar
IDENTITY
id colunas que são incrementadas automaticamente para que você não tenha problemas de integridade.