SELECT
TableC.ID
FROM TableC LEFT JOIN TableB ON TableB.ID = TableC.TableB_ID
LEFT JOIN TableA ON TableA.ID = TableB.TableA_ID
WHERE TableA.Plant_ID NOT IN (SELECT ID FROM TablePlants)
I encourage you to ban
SELECT *
from your vocabulary, as it is a quite bad practice :)
If you put some constraint enforcements on your foreign keys, this situation would not happen anymore.
For example
ALTER TABLE TableA
WITH CHECK ADD CONSTRAINT FK_TableA_TablePlants
FOREIGN KEY (Plant_ID)
REFERENCES TablePlants (ID)
ON UPDATE CASCADE
ON DELETE CASCADE
GO