FROM products prod
Это понятно, основная таблица.
INNER JOIN categories cat ON prod.idCategory = cat.idCategory
Это тоже понятно, присоединяется к товару название категории.
INNER JOIN productAttribute atr ON cat.idCategory = atr.idCategory
И здесь ясно, присоединяем список атрибутов для этой категории.
INNER JOIN attributeValue val ON cat.idCategory = val.idCategory
А вот здесь непонятно, зачем для товара брать все значения атрибутов его категории? Нужно присоединять только значение уже присоединённого атрибута для данного товара. idCategory в таблице attributeValue вообще быть не должно.