ALTER TABLE
deve ter valores literais no momento em que a instrução é analisada (ou seja, em tempo de preparação). Você não pode colocar variáveis ou parâmetros na instrução no momento da análise, mas pode colocar variáveis na instrução antes tempo de análise. E isso significa usar SQL dinâmico:
SET @new_index = (SELECT MAX(id) FROM sales );
SET @sql = CONCAT('ALTER TABLE sales AUTO_INCREMENT = ', @new_index);
PREPARE st FROM @sql;
EXECUTE st;