Тогда, когда операторы оцениваются по порядку, пока один из них не будет выполнен.В первом ряду выполняется первое условие When, поэтому скидка отсутствует.Вместо этого попробуйте:
WHEN products.product_discount = 0 AND categories.category_discount = 0 THEN products.product_price
Или даже измените порядок следующим образом:
SELECT products.id, products.product_name, products.product_price, products.product_discount, categories.category_discount,
(CASE WHEN products.product_discount != 0 THEN products.product_price - ( products.product_price * products.product_discount)/100
WHEN categories.category_discount !=0 THEN products.product_price - ( products.product_price * categories.category_discount)/100
ELSE products.product_price
END) AS amount
...