I risultati che ottieni sono attesi. Dovresti avere un ID diverso per C++ e questo porterebbe ai risultati desiderati.
Devi aggiungere una colonna ID nel B
tabella che useresti nella C
tabella (come chiave esterna) in modo da poter filtrare i risultati.
Risolvere questo problema di progettazione del database ti aiuterà a risolvere questo problema poiché il tuo design attuale è difettoso.
La query risultante dovrebbe essere simile 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;
Inoltre, consiglierei di utilizzare IDENTITY
colonne id che si incrementano automaticamente in modo da non incorrere in problemi di integrità.