Výsledky, které získáte, jsou očekávané. Měli byste mít jiné id pro C++ a to by vedlo k požadovaným výsledkům.
Musíte přidat a ID sloupec v B
tabulku, kterou byste použili v C
tabulky (jako cizí klíč), abyste mohli filtrovat výsledky.
Oprava tohoto problému s návrhem databáze vám pomůže vyřešit tento problém, protože váš současný návrh je chybný.
Výsledný dotaz by měl vypadat takto:
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;
Také bych doporučil použít IDENTITY
id sloupce, které se automaticky zvyšují, takže nenarazíte na problémy s integritou.