Tableau Course
Joins in Tableau
A join combines columns from two tables by matching rows on a shared key field. Knowing which join type to use — and when something goes wrong — is essential for working with any real-world multi-table dataset.
Why You Need Joins
Most real datasets live across multiple tables. In Superstore, orders are stored in the Orders sheet, return information is in the Returns sheet, and regional manager assignments are in the People sheet. If you want a chart that shows Sales alongside whether each order was returned and who managed that region, you need to bring all three tables together — and that requires joins.
Joins happen on the Data Source canvas — the same screen where you drag tables. Once a join is configured there, every worksheet in the workbook sees the combined result as a single flat table.
The Four Join Types
Tableau supports four standard SQL join types. Each one decides differently which rows from each table to keep in the result.
Returns only rows where the key field matches in both tables. Rows that exist in only one table are dropped. This is the default join type in Tableau and the most commonly used. Use it when you only want records that have a match on both sides.
Returns all rows from the left table, plus any matching rows from the right table. Where there is no match, the right table columns contain nulls. Use it when you want to keep all records from your primary table regardless of whether they have a match.
Returns all rows from the right table, plus any matching rows from the left table. Where there is no match, the left table columns contain nulls. The mirror image of a left join — less commonly used, since you can usually achieve the same result by swapping table positions and using a left join.
Returns all rows from both tables. Where there is no match, null fills the missing columns on either side. Use it when you need to see all records from both tables — including those with no match — for a complete audit or gap analysis.
Creating a Join on the Data Source Canvas
Here is how to join the Orders and Returns sheets from the Superstore Excel file:
Join Configuration Mockup
| Order ID | Category | Sales | Returned |
|---|---|---|---|
| CA-2023-001 | Furniture | 1,200 | Yes |
| CA-2023-002 | Technology | 3,500 | null |
| TX-2023-041 | Office Supplies | 420 | null |
| CA-2023-087 | Furniture | 890 | Yes |
Common Join Problems and How to Spot Them
| Problem | Symptom in Tableau | Fix |
|---|---|---|
| Fan-out (duplicate rows) | SUM(Sales) is much higher than expected — often double or triple the correct value | Use a Relationship instead of a join, or use COUNTD and LOD expressions to de-duplicate |
| Wrong join key | All right-table columns are null even for records that should match | Open the join dialog and verify that the correct field is selected on both sides |
| Data type mismatch on key | No rows match even though the values look identical in both tables | Check that both key fields share the same data type — a string "001" will not match an integer 1 |
| Missing rows (too restrictive) | SUM(Sales) is lower than expected — some orders have disappeared | You may have used an Inner join when a Left join was needed — switch join type |
Joins vs Relationships
Since Tableau 2020.2, there is a newer way to combine tables called Relationships. Relationships sit above the canvas level — they connect tables contextually without physically merging rows the way a join does. This prevents the fan-out problem that joins create when one table has multiple matching rows for a single row in another.
Relationships are now Tableau's recommended default approach for combining tables. Joins are still available and still necessary for specific cases — such as combining tables that need to be pre-aggregated before joining, or when connecting to custom SQL. For most standard multi-table setups in this course, Relationships are the better choice. Joins are covered here because they are fundamental SQL knowledge and because some data situations still require them.
The fan-out problem is the most dangerous join error because it is invisible. Your chart builds, the numbers look plausible, but every aggregate is wrong — inflated by duplicated rows. Always verify your join result by checking a known total against the source data. For the Superstore dataset, total Sales should be approximately $2.3 million. If a join makes it $4.6 million, you have a fan-out. The quickest check is to drag Number of Records onto a blank canvas — if the count is higher than the row count of your primary table, duplicate rows have been introduced by the join.
Practice Questions
1. You are joining an Orders table to a Returns table and want to keep all orders — including those that were never returned. Which join type should you use?
2. After joining two tables, SUM(Sales) is double the expected value. What is the name of the join problem that causes this symptom?
3. Which join type returns only rows where the key field has a matching value in both tables, dropping all unmatched rows?
Quiz
1. After dragging two tables onto the Data Source canvas, how do you open the join configuration panel to select the join type and key fields?
2. A data analyst needs to compare every record from both a Customers table and an Orders table, including customers who have never ordered and orders with no matching customer. Which join type should they use?
3. What is the main advantage of using Tableau Relationships over Joins when combining tables?
Next up — Lesson 13: Data Blending — combining data from completely separate sources when a join or relationship is not possible.