Unmatched left rows are preserved with right NULLs.

highlighted = computed this step

Left-only rows

If a left row has no matching right row, the output keeps it and pads right columns with NULL.

left only plus right NULLs\text{left only plus right NULLs}

Read left-only rows

There are 2 left-only output rows.

left only=2\text{left only}=2

Full-outer-join examples are tiny finite-table transforms; SQL dialect completeness, type coercion, optimizer behavior, execution cost, indexing, output ordering guarantees, and database-product claims are out of scope.

Left-only rows get right NULLs: left tableemp_idnamedept_id1Ada102Ben203Cy304DeeNULL Left-only rows get right NULLs: right tabledept_iddept_name10ops20eng20platform40legalNULLunknown candidate key matchesleftSourcerightSourceleftKeyrightKeymatched001010yes011020no021020no031040no0410NULLno102010no112020yes122020yes132040no1420NULLno203010no213020no223020no233040no2430NULLno30NULL10no31NULL20no32NULL20no33NULL40no34NULLNULLno FULL OUTER JOIN output rowsleft.emp_idleft.nameleft.dept_idright.dept_idright.dept_name1Ada1010ops2Ben2020eng2Ben2020platform3Cy30NULLNULL4DeeNULLNULLNULLNULLNULLNULL40legalNULLNULLNULLNULLunknown output row classificationclassleftSourcerightSourcerowmatched00[1, Ada, 10, 10, ops]matched11[2, Ben, 20, 20, eng]matched12[2, Ben, 20, 20, platform]left_only2NULL[3, Cy, 30, NULL, NULL]left_only3NULL[4, Dee, NULL, NULL, NULL]right_onlyNULL3[NULL, NULL, NULL, 40, legal]right_onlyNULL4[NULL, NULL, NULL, NULL, unknown] FULL OUTER JOIN factsfactvalueleftRowCount4rightRowCount5candidatePairCount20matchingPairCount3leftOnlyRowCount2rightOnlyRowCount2outputRowCount7duplicateMatchRows1nullKeyCandidatePairs8rowOrdermatched_left_source_then_left_only_then_right_only

Right side is padded

The classification table marks these rows as left_only.

class left only\text{class left only}

Summary

FULL OUTER JOIN preserves unmatched left rows.

left preserved\text{left preserved}