By looking at the result i assume you have set a from_date value to discount records which has to_date '2999-01-01'
LEFT OUTER JOIN discount AS id
ON id.identifiers = isa.identifiers
AND id.from_date <= isa.sales_date
AND id.to_date >= isa.sales_date
If so in this join statement those discount records also joins which creates duplicate records.
Either you can set from_date to a higher value like '2999-01-01' for the discount records which has to_date '2999-01-01' or change the join statemnt as below.
LEFT OUTER JOIN discount AS id
ON id.identifiers = isa.identifiers
AND id.from_date <= isa.sales_date
AND id.to_date >= isa.sales_date
AND id.to_date < '2999-01-01'
EDIT
According to chat following should work. A new condition BV.name = u.store is added to second join with discount table.
ALTER PROCEDURE [dbo].[Loid] @month INT,
@year INT,
@report_source NVARCHAR(255),
@is_primary INT
AS
SELECT Cast(isa.sales_date AS DATE) AS
DATE,
BV.name,
isa.identifiers,
isa.quantity,
Isnull(id.sales_price, Isnull(u.sales_price, isa.sales_price)) AS
SALES_PRICE
FROM book_sales AS isa
INNER JOIN store AS BV
ON bv.store_id = isa.store_id
LEFT OUTER JOIN discount AS id
ON id.identifiers = isa.identifiers
AND id.from_date <= isa.sales_date
AND id.to_date >= isa.sales_date
AND id.to_date < '2999-01-01'
AND BV.name = id.store
LEFT OUTER JOIN discount AS u
ON u.identifiers = isa.identifiers
AND u.to_date = '2999-01-01'
AND BV.name = u.store
LEFT OUTER JOIN book_contributor AS BC
ON BC.book_id = isa.book_id
WHERE Month(isa.sales_date) = @month
AND Year(isa.sales_date) = @year
AND isa.report_source = @report_source
AND bc.is_primary = @is_primary