Los resultados que obtienes son los esperados. Debería tener una identificación diferente para C++ y eso conduciría a los resultados que desea.
Debe agregar una columna de ID en B
tabla que usaría en el C
table (como clave externa) para que pueda filtrar los resultados.
Arreglar este problema de diseño de la base de datos lo ayudará a resolver este problema ya que su diseño actual es defectuoso.
La consulta resultante debería verse así:
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;
Además, recomendaría usar IDENTITY
columnas de identificación que se incrementan automáticamente para que no tenga problemas de integridad.