Si te actualiza todos los registros del inventario es porque la cláusula del where la tienes mal. La parte del Where te permite limitar los registros que deseas actualizar.
Si te fijas, en tu where estás limitando el update para todos los productos que tengan el campo "cantidadcompra" igual a la variable $cantidad. Eso a todas luces no te va a funcionar, porque la limitación del where tendría que ser por el identificador del producto que se desea actualizar.
Personalmente no entiendo muy bien los nombres de tus tablas (por ejemplo la tabla compra y venta me parecen la misma cosa, la verdad). No entiendo tampoco por qué haces el join, pues en principio no lo veo necesario. Por eso te doy un ejemplo sobre cómo creo que debería ser tu sentencia, con nombres de tablas y columnas que considero más entendibles.
UPDATE product SET stock = stock - 5 where product_id = 103
Esa sería la sentencia, suponiendo que el identificador del producto que deseas actualizar es el 103 y que se desean restar 5 unidades del stock de ese producto.