Your subquery finds the latest of all prices, no matter the product, which isn't what you need. Fixing it isn't trivial, but you could rewrite your nested query to a LEFT JOIN
, which would seem to simplify things; (sorry, your tables are slightly renamed to make SQLfiddle happy)
SELECT `.PRODUCTS.`.*, `.CATEGORIES.`.*, `q_prices`.*
FROM `.PRODUCTS.`
LEFT JOIN `.CATEGORIES.`
ON `.PRODUCTS.`.`category_id` = `.CATEGORIES.`.`category_id`
LEFT JOIN `.PRICES.` `q_prices`
ON `q_prices`.`product_id` = `.PRODUCTS.`.`product_id`
LEFT JOIN `.PRICES.` `dummy`
ON `dummy`.`product_id` = `.PRODUCTS.`.`product_id`
AND `q_prices`.`price_modified` < `dummy`.`price_modified`
WHERE `dummy`.`price_modified` IS NULL;