I'm writing a query to insert data from two sources. In these sources, sale_id is unique, but when inserting data, I'm experiencing infinite duplication in the SALE_SRC_ID. The value 2000000000 should only appear once in the table.
WITH src AS (
SELECT DISTINCT
SALE_ID,
EVENT_DT::TIMESTAMP,
CUSTOMER_ID,
PRODUCT_NAME,
ADDRESS,
CHANNEL_ID,
EMPLOYEE_ID,
PAYMENT_METHOD,
quantity::INT,
price::NUMERIC,
costs::NUMERIC,
TRANSACTION_AMOUNT::NUMERIC,
(price::NUMERIC - costs::NUMERIC) * quantity::INT AS REVENUE,
DELIVERY_DATE::TIMESTAMP,
'SA_SALES_CANADA' AS source_system,
'SRC_CANADA' AS source_entity
FROM SA_SALES_CANADA.SRC_SALES_CANADA
UNION ALL
SELECT DISTINCT
SALE_ID,
EVENT_DT::TIMESTAMP,
CUSTOMER_ID,
PRODUCT_NAME,
ADDRESS,
'n.a.' AS CHANNEL_ID,
EMPLOYEE_ID,
PAYMENT_METHOD,
quantity::INT,
price::NUMERIC,
costs::NUMERIC,
TRANSACTION_AMOUNT::NUMERIC,
(price::NUMERIC - costs::NUMERIC) * quantity::INT AS REVENUE,
DELIVERY_DATE::TIMESTAMP,
'SA_SALES_USA' AS source_system,
'SRC_USA' AS source_entity
FROM SA_SALES_USA.SRC_SALES_USA
)
INSERT INTO bl_3nf.ce_sales(
SALE_ID,
SALE_SRC_ID,
EVENT_DT,
CUSTOMER_ID,
PRODUCT_ID,
ADDRESS_ID,
CHANNEL_ID,
EMPLOYEE_ID,
PAYMENT_METHOD_ID,
QUANTITY,
PRICE,
COSTS,
TRANSACTION_AMOUNT,
REVENUE,
DELIVERY_DATE,
INSERT_DT,
UPDATE_DT,
SOURCE_SYSTEM,
SOURCE_ENTITY
)
SELECT
nextval('BL_3NF.SE_CE_SALES'),
COALESCE(SALE_ID, 'n.a.'),
COALESCE(EVENT_DT, '1900-01-01'::TIMESTAMP),
CUST.CUSTOMER_ID,
PROD.PRODUCT_ID,
ADDR.ADDRESS_ID,
CH.CHANNEL_ID,
em.EMPLOYEE_ID,
pm.PAYMENT_METHOD_ID,
COALESCE(quantity, -1),
PRICE,
COSTS,
TRANSACTION_AMOUNT,
REVENUE,
COALESCE(DELIVERY_DATE, '1900-01-01'::TIMESTAMP),
NOW(),
NOW(),
src.source_system,
src.source_entity
FROM src
LEFT JOIN bl_3nf.ce_addresses addr ON src.address = addr.address_src_id
LEFT JOIN bl_3nf.ce_channels ch ON src.channel_id = ch.channel_src_id
LEFT JOIN bl_3nf.ce_employees em ON src.employee_id = em.employee_src_id
LEFT JOIN bl_3nf.ce_products prod ON src.product_NAME = prod.product_src_id
LEFT JOIN bl_3nf.ce_payment_methods pm ON src.PAYMENT_METHOD = pm.payment_method_src_id
LEFT JOIN BL_3NF.CE_CUSTOMERS_SDC cust ON src.customer_id = cust.customer_src_id
LIMIT 50;

Using DISTINCT doesn't solve the problem. How can I resolve this issue?