Tienes un unexpected identifier en tu SQL declaración ... Esto se debe a que está utilizando el alias zcp innecesariamente Con el SQL que tiene, no hay necesidad de alias la table en el DELETE cláusula.
DELETE FROM zc_products
WHERE products_id IN (SELECT DISTINCT p.products_id FROM zc_products p, zc_products_to_categories pc WHERE
p.products_id = pc.products_id AND
pc.categories_id IN (SELECT DISTINCT zcc.categories_id FROM zc_categories zcc WHERE zcc.categories_status = 0));
NOTA Si usó una herramienta como MySQL Workbench, identificaría el problema para usted... lo que le permite solucionar los problemas más fácilmente.