Why is my view selecting hundreds of duplicates?

This view selects 696 entries. The CSV file has 48 entries.

CREATE OR REPLACE VIEW insert_3_char_abts AS SELECT     ext.construct_id,     n_term,     enz_name,     c_term,     cpp,     mutations,     ext.g_batch,     ext.p_batch,     emptycol,          c_batch,     abts5_mean,     abts5_SD,     abts5_n,     abts5_method,     abts5_study_id,     abts7_mean,     abts7_SD,     abts7_n,     abts7_method,     abts7_study_id,     pur.pk_purified_enz_id FROM EXTERNAL ((        construct_id NUMBER(10),       n_term VARCHAR2 (50),       enz_name VARCHAR2 (50),       c_term VARCHAR2 (50),       cpp VARCHAR2 (50),       mutations VARCHAR2 (50),       g_batch VARCHAR2 (50),       p_batch VARCHAR2 (50),       emptycol VARCHAR2(50),        c_batch VARCHAR2 (50),       abts5_mean NUMBER (5, 2),       abts5_SD NUMBER (5, 2),       abts5_n NUMBER (3),       abts5_method VARCHAR2 (50),       abts5_study_id VARCHAR2 (8),       abts7_mean NUMBER (5, 2),       abts7_SD NUMBER (5, 2),       abts7_n NUMBER (3),       abts7_method VARCHAR2 (50),       abts7_study_id VARCHAR2 (8))            TYPE ORACLE_LOADER     DEFAULT DIRECTORY data_to_input     ACCESS PARAMETERS (         RECORDS DELIMITED BY NEWLINE          SKIP 1         BADFILE bad_files:'badflie_view_before_insert_char_abts.bad'         FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'         MISSING FIELD VALUES ARE NULL          )      LOCATION ('CHAR_ABTS.CSV')     REJECT LIMIT UNLIMITED) ext  INNER JOIN purified_enz pur ON ext.p_batch = pur.p_batch INNER JOIN produced pr  ON pr.pk_produced_id = pur.fk_produced_id; ; 

If I finish this statement with

AND pr.fk_construct_id = ext.construct_id; 

It selects 46 out of 48 records, which is better, but not great.