J'ai l'impression avoir solutionné les problème avec l'ajout de :
Pour les doublons :
GROUP BY p.id_product
Pour les prix spécifique quand le prix de base a été modifié :
SELECT DISTINCT p.id_product, CASE WHEN sp.price > -1 THEN IFNULL(sp.price*(1-sp.reduction),sp.price) ELSE IFNULL(p.price*(1-sp.reduction),p.price) END AS pprice,