---
schema_version: "1"
id: 5b161d8c052f8154d44446b94528b1096842a33616e5d2a7263685e50435a46e
title: Full Outer Join
collection: admin
version: current
locale: en-us
portal_url: https://docs.salesforce.com/admin/current/en-us/data/264-0-0/c360_a_batch_transform_join_outerjoin.md
canonical_url: https://help.salesforce.com/s/articleView?id=data.c360_a_batch_transform_join_outerjoin.htm&release=264.0.0&type=5
source_site: help.salesforce.com
content_type: documentation
content_hash: 860fb0f750d619f861a1dae6d9bc7f6035208c9ff72329de5d9b903f9c890004
description: A full outer join includes all rows from the left and right input data source objects, regardless of whether they have matches. The join includes all matched rows in the output data when multiple rows match.
products:
  - Data 360
release: "264"
---
# Full Outer Join

A full outer join includes all rows from the left and right input data source objects, regardless of whether they have matches. The join includes all matched rows in the output data when multiple rows match.

![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-data-data_cloud-264-0-0-production-enus/f3569962-3c9b-4f83-9d0c-b6a574e785da/images/icon_example.png)

Example

Our company's marketing team captures demographic data in Redshift for opportunities stored in Salesforce. To help create more targeted campaigns, the team is segmenting our current opportunities by the Education Level demographic. Let’s use a full outer join to combine the opportunity and demographic data.

Consider the following two input data sources that feed the batch data transform's output data. To illustrate how the full outer join handles unmatched rows and duplicate keys, we included them in both input data source objects.

![The left data stream shows the opportunity ID, customer name, and opportunity amount. The right data stream shows the opportunity ID and educational level.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-data-data_cloud-264-0-0-production-enus/f3569962-3c9b-4f83-9d0c-b6a574e785da/resources-global/analytics/images/bi_integrate_recipeTransformations_fullOuterJoin_dataStreams.png)

After performing the full outer join based on the matching the keys, the data transform produces the following output.

![The new dataset contains columns from both data streams.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-data-data_cloud-264-0-0-production-enus/f3569962-3c9b-4f83-9d0c-b6a574e785da/resources-global/analytics/images/bi_integrate_recipeTransformations_fullOuterJoin_results.png)

All rows—matched or not—are included in the output. Because of multiple matches, you see two records with `Opp_ID` 2 (Amy and Bob) and two more records with `Opp_id 1` (High School and Secondary School). `Opp_ID` 4 and `Opp_id` 5 are also included despite not having a match.

By including unmatched left records, we now know that we have to find out David’s education level to complete the output data. By including unmatched right records, we see that no customers have a PhD.