В opencart вы соединяете значения product_id вместе, чтобы получить полную строку данных (и используете предложение where для установки правильного идентификатора языка описания, поэтому
SELECT * FROM product p LEFT JOIN product_description pd ON p.product_id = pd.product_id WHERE pd.language_id = 1 LIMIT 20
Это позволит получить все данные из обеих таблиц и правильно объединить их, используя ограничение в 20 продуктов и язык 1 (по умолчанию английский). Конечно, при правильной записи в php вам нужно будет динамически вызывать некоторые данные (например, префикс таблицы и идентификатор языка), поэтому он будет работать, если у вас есть несколько языков или таблиц базы данных с префиксами. Что-то вроде
$query = "SELECT * FROM `" . DB_PREFIX . "product` p LEFT JOIN `" . DB_PREFIX . "product_description` pd ON p.product_id = pd.product_id WHERE pd.language_id = " . (int)$this->config->get('config_language_id') . " LIMIT 20";