Вот такой ещё вариант увидел и немного подправил (добавил стандартный префикс таблиц oc_ где нужно).
ЗА ПОСЛЕДСТВИЯ НЕ ОТВЕЧАЮ! ПРЕДВАРИТЕЛЬНО СДЕЛАЙТЕ БЕКАП БД! Проверялось на ocStore 2.3.0.2.3
DELETE oc_manufacturer, oc_manufacturer_description, oc_manufacturer_to_store FROM oc_manufacturer
LEFT JOIN oc_manufacturer_description ON oc_manufacturer_description.manufacturer_id = oc_manufacturer.manufacturer_id
LEFT JOIN oc_manufacturer_to_store ON oc_manufacturer_to_store.manufacturer_id = oc_manufacturer.manufacturer_id
WHERE oc_manufacturer.manufacturer_id NOT IN (SELECT DISTINCT manufacturer_id FROM oc_product)
Удалит всех производителей, которые НЕ привязаны к какому-либо товару.
Реальный сценарий использования: импортировали товары, но напутали колонку с производителем и теперь у вас в базе сотни левых производителей. А потом импортировали нормально. Но теперь в базе некорректные производители вперемешку с нормальными. Вот чтобы ручками не вычищать - лезем в базу и исправляем. Очистка кеша ocStore после запроса обязательна.
У кого хватит сил - дополните, чтобы еще и url_alias подчищало, хотя процедура не обязательна (чисто пространство имен освободить).