As I said, that's a hypothetical scenario. I posted the actual scenario before and got no responses. But I'll try again here.
Here's the SQL (in this *real* example, DESSTEPS is equivalent to the hypthetical TableA and STEP is equivalent to the hypothetical TableB):
SELECT
TEST.TS_TEST_ID as 'Test Plan ID',
TEST.TS_NAME as 'Test Plan Name',
TEST.TS_STEPS as 'Test Plan Step Count',
TEST.TS_RESPONSIBLE AS 'Test Plan Designer',
TEST.TS_USER_03 AS 'Test Plan Business Value',
TEST.TS_USER_02 AS 'Test Plan Complexity',
TEST.TS_USER_04 AS 'Test Plan Functional Area',
TEST.TS_USER_25 as 'Test Plan Full Folder Path',
RUN.RN_RUN_ID as 'Run ID',
RUN.RN_RUN_NAME as 'Run Name',
RUN.RN_STATUS as 'Run Status',
RUN.RN_DURATION AS "Run Duration",
RUN.RN_TESTER_NAME as 'Run Tester ID',
RUN.RN_ASSIGN_RCYC AS "Run Target Cycle",
RCY_RN.RCYC_NAME AS "Run Target Cycle Name",
TESTCYCL.TC_EXEC_DATE AS "Instance Execution Date",
TESTCYCL.TC_EXEC_TIME AS "Instance Execution Time",
TESTCYCL.TC_PLAN_SCHEDULING_DATE AS "Instance Planned Exec Date",
TESTCYCL.TC_PLAN_SCHEDULING_TIME AS "Instance Planned Exec Time",
TESTCYCL.TC_ASSIGN_RCYC as 'Instance Assigned Cycle',
RCY_TC.RCYC_NAME AS "Instance Cycle Name",
TESTCYCL.TC_USER_01 as 'Instance Responsible Tester Name',
TESTCYCL.TC_USER_02 as 'Instance Planned End Date',
CYCLE.CY_CYCLE AS "Test Set Name",
CYCLE.CY_CYCLE_ID AS "Test Set ID",
CYCLE.CY_USER_01 AS "Test Set Functional Area",
CONVERT(NVARCHAR(MAX),CYCLE.CY_COMMENT) AS "Test Set Description", --QC Memo fields must be converted to nvarchar
CYCLE.CY_ASSIGN_RCYC AS "Test Set Target Cycle ID" ,
RCY_CY.RCYC_NAME AS "Test Set Target Cycle Name",
CONVERT(NVARCHAR(MAX),CYCLE.CY_USER_07) AS "Test Set Full Folder Path", --QC Memo fields must be converted to nvarchar
DESSTEPS.DS_STEP_NAME as 'Step Name',
STEP.ST_STATUS as 'Step Status' ,
DESSTEPS.DS_ID as 'Step ID',
STEP.ST_EXECUTION_DATE as 'Step Execution Start Date',
DESSTEPS.DS_DESCRIPTION as 'Step Description',
DESSTEPS.DS_USER_01 as 'Step Test Data',
DESSTEPS.DS_USER_02 AS 'Step Audit Evidence(DESC)',
DESSTEPS.DS_USER_03 as 'Step Audit Evidence Required',
DESSTEPS.DS_USER_04 AS 'Step Audit Verification Type',
DESSTEPS.DS_USER_05 as 'Step Audit Approve/Reject',
DESSTEPS.DS_USER_06 as 'Step Control Point ID(s)',
STEP.ST_EXECUTION_TIME as 'Step Execution Time',
STEP.ST_ACTUAL as 'Step Actual Result'
FROM CYCL_FOLD LEFT JOIN CYCLE ON CYCL_FOLD.CF_ITEM_ID = CYCLE.CY_FOLDER_ID
LEFT JOIN TESTCYCL ON CYCLE.CY_CYCLE_ID = TESTCYCL.TC_CYCLE_ID
LEFT JOIN TEST ON TESTCYCL.TC_TEST_ID = TEST.TS_TEST_ID
LEFT JOIN RUN ON TEST.TS_TEST_ID = RUN.RN_TEST_ID AND RN_EXECUTION_DATE = (SELECT MAX(RN_EXECUTION_DATE) FROM RUN WHERE TC_TESTCYCL_ID = RN_TESTCYCL_ID) AND RN_EXECUTION_TIME = (SELECT MAX(RN_EXECUTION_TIME) FROM RUN WHERE TC_TESTCYCL_ID = RN_TESTCYCL_ID AND RN_EXECUTION_DATE = (SELECT MAX(RN_EXECUTION_DATE) FROM RUN WHERE TC_TESTCYCL_ID = RN_TESTCYCL_ID))
LEFT JOIN RELEASE_CYCLES RCY_RN ON RCY_RN.RCYC_ID = RN_ASSIGN_RCYC
LEFT JOIN RELEASE_CYCLES RCY_CY ON RCY_CY.RCYC_ID = CY_ASSIGN_RCYC
LEFT JOIN RELEASE_CYCLES RCY_TC ON RCY_TC.RCYC_ID = TC_ASSIGN_RCYC
LEFT JOIN STEP ON RUN.RN_RUN_ID = STEP.ST_RUN_ID
LEFT JOIN DESSTEPS ON DESSTEPS.DS_TEST_ID = TEST.TS_TEST_ID --AND DESSTEPS.DS_ID = STEP.ST_DESSTEP_ID
WHERE TESTCYCL.TC_ASSIGN_RCYC = @Assigned_Cycle@ AND TS_TYPE = 'MANUAL'
ORDER BY TEST.TS_TEST_ID
This is the scenario where the rows are duplicated (like in the hypothetical scenario, the row from TableB is duplicated).