Resultaten du får förväntas. Du bör ha ett annat ID för C++ och det skulle leda till de resultat du vill ha.
Du måste lägga till och ID-kolumnen i B
tabell som du skulle använda i C
tabell (som en främmande nyckel) så att du kan filtrera resultaten.
Att fixa detta problem med databasdesign hjälper dig att lösa det här problemet eftersom din nuvarande design är felaktig.
Den resulterande frågan bör se ut så här:
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;
Jag skulle också rekommendera att du använder IDENTITY
id-kolumner som ökar automatiskt så att du inte stöter på integritetsproblem.