NATURAL LEFT OUTER JOIN in DAX – Complete Step-by-Step Guide

September 23, 2026 91 visits

In this article, we will learn how to use NATURALLEFTOUTERJOIN in DAX to combine two tables using their common columns. We will also learn how to use SELECTCOLUMNS to return only the required columns from the joined result.

📥 Practice Data:
Download Practice Data Free

🎥 Prefer learning through video?
DAX YouTube Playlist

What Is NATURALLEFTOUTERJOIN in DAX?

NATURALLEFTOUTERJOIN combines two tables by matching columns that have the same column name and compatible data lineage. It behaves like a left outer join: all rows from the left table are retained, while matching values from the right table are added when a matching key is available.

The basic syntax is:

DAX Syntax
NATURALLEFTOUTERJOIN(
    <Left Table>,
    <Right Table>
)
Key takeaway:
The first table is the left table. All rows from this table are preserved, while matching data from the second table is brought into the result.

1. Performing a Natural Left Outer Join

Query

DAX Query
// NATURAL LEFT OUTER JOIN

EVALUATE
    NATURALLEFTOUTERJOIN(
        students_natural,
        payments
    )

Step-by-step explanation

Step 1: EVALUATE
EVALUATE tells DAX to return the result of the table expression as a query result.

Step 2: NATURALLEFTOUTERJOIN
NATURALLEFTOUTERJOIN combines the two supplied tables based on their common join column(s).

Step 3: students_natural
students_natural is the left table. Because this is a left outer join, every row from students_natural is retained in the result.

Step 4: payments
payments is the right table. When a matching value is found in the join column, the corresponding columns from payments are included in the result.

How the Join Works

Assume the two tables contain a common column such as a student identifier. DAX uses that common column to match rows between students_natural and payments.

students_natural payments Joined Result
Student exists Matching payment exists Student + payment information
Student exists No matching payment Student + blank payment columns

This is the key behavior of a left outer join: rows from the left table are not removed just because a matching row does not exist in the right table.

Key takeaway:
NATURALLEFTOUTERJOIN(students_natural, payments) keeps all rows from students_natural and adds matching information from payments.

2. Selecting Specific Columns from the Joined Result

Query

DAX Query
// Select specific columns from the result table

EVALUATE
    SELECTCOLUMNS(
        NATURALLEFTOUTERJOIN(
            students_natural,
            payments
        ), 
        [Name], 
        [Paid]
    )

Step-by-step explanation

Step 1: EVALUATE
The EVALUATE statement returns the final table produced by the expression.

Step 2: NATURALLEFTOUTERJOIN
First, DAX creates a joined table by combining students_natural with payments.

Step 3: SELECTCOLUMNS
The result of the join is then passed into SELECTCOLUMNS. This allows us to return only the columns required for the final output.

Step 4: [Name]
The [Name] column is selected from the joined result.

Step 5: [Paid]
The [Paid] column is also selected from the joined result.

Understanding the Query Flow

It is useful to read the query from the inside out:

  1. NATURALLEFTOUTERJOIN combines the two tables.
  2. The joined table becomes the input to SELECTCOLUMNS.
  3. SELECTCOLUMNS keeps only [Name] and [Paid].
  4. EVALUATE returns the final table.
Query Flow
students_natural
        +
    payments
        ↓
NATURALLEFTOUTERJOIN
        ↓
   Joined Table
        ↓
 SELECTCOLUMNS
   [Name], [Paid]
        ↓
     EVALUATE

What Will You Get?

The final query returns only the two selected columns:

Name Paid
Student 1 1000
Student 2 500
Student 3 Blank

The values above are only an illustration. Your actual result will depend on the data available in students_natural and payments.

Key takeaway:
You can combine NATURALLEFTOUTERJOIN with SELECTCOLUMNS when you want to join tables first and then return only specific columns from the joined result.

Understanding NATURALLEFTOUTERJOIN vs SELECTCOLUMNS

Function Purpose
NATURALLEFTOUTERJOIN Combines two tables using their common join columns while retaining all rows from the left table.
SELECTCOLUMNS Creates a table containing only the columns specified in the expression.
EVALUATE Returns the final table expression as the DAX query result.

Important Notes

1. The Left Table Controls Row Preservation

In a left outer join, all rows from the first table are preserved. In this example, students_natural is the left table.

2. Matching Columns Are Important

NATURALLEFTOUTERJOIN identifies the columns used for the natural join based on common column names and compatible data lineage. Therefore, the structure of the two tables matters when using this function.

3. Unmatched Right-Side Values Become Blank

If a row from students_natural does not have a matching row in payments, the row from the left table is still returned. Columns coming from the right table can contain BLANK.

4. SELECTCOLUMNS Creates the Final Projection

The second query does not return every column produced by the join. SELECTCOLUMNS projects the joined table into the requested [Name] and [Paid] columns.

📝 Practice Exercise

Try modifying the query to return another column from the joined result along with [Name] and [Paid].

Then experiment with the data so that one student does not have a matching payment record. Observe how the left outer join preserves the student row while the payment value becomes blank.

Practice Query

DAX Query
EVALUATE
    SELECTCOLUMNS(
        NATURALLEFTOUTERJOIN(
            students_natural,
            payments
        ),
        [Name],
        [Paid]
    )

Conclusion

In this article, we learned how to perform a natural left outer join in DAX and how to select specific columns from the joined result.

  • NATURALLEFTOUTERJOIN combines two tables using common join columns.
  • The left table’s rows are preserved even when there is no matching row in the right table.
  • SELECTCOLUMNS can be used to return only the required columns from the joined table.
  • EVALUATE returns the final table expression as the DAX query result.

Understanding table joins is important when working with DAX queries because it helps you combine related datasets and build more focused analytical results.


📥 Practice Data:
Download Practice Data Free

🎥 Prefer learning through video?
DAX YouTube Playlist