1. Выборку по таблице tbl_publication можно вынести в подзапрос. Тогда её можно сразу ограничить 12 записями и делать JOIN по небольшому набору. Заодно можно избавиться от группировки, тем более, что в строгом SQL она неправильная.
2. Учитывая, что используется LEFT JOIN с условием 
tbl_publications_media.media_type = 3, условие 
(tbl_publications_media.media_type IS NULL OR tbl_publications_media.media_type = 3)
 будет истинным всегда, от него можно избавиться.
SELECT `p`.`id`, `p`.`name`, `p`.`content`, `p`.`create_time`,
       `p`.`type`, `p`.`section_id`, `m`.`media_url`
  FROM (
    SELECT `id`, `name`, `content`, `create_time`, `type`, `section_id`
      FROM `tbl_publication`
    WHERE `article` = 0 AND `status` = 1 AND `type` = 0
    ORDER BY `p`.`id` DESC
    LIMIT 12
  ) AS `p`
  LEFT JOIN `tbl_publications_media` AS `m`
    ON `m`.`publication_id` = `p`.`id`
      AND `m`.`media_type` = 3
P.S. Про группировку:
Представьте, что с одной строкой из tbl_publications связались две разные строки из tbl_publications_media. Какая из них должна попасть в группу и почему?