---
schema_version: "1"
id: a8dbbedea0eed481cb52516df8a8c2f4940acebf294c24cb9a0dad7377748a03
title: How Null Values Work in Decision Tables
collection: admin
version: current
locale: en-us
portal_url: https://docs.salesforce.com/admin/current/en-us/ind/264-0-0/bre_null_values_dt.md
canonical_url: https://help.salesforce.com/s/articleView?id=ind.bre_null_values_dt.htm&release=264.0.0&type=5
source_site: help.salesforce.com
content_type: documentation
content_hash: 9bd2c250d06442b79a44b3c43ea4dc7b04704be22fc328bff54262d34a2a614d
description: How decision tables treat null and blank input cells depends on the table type. In standard decision tables, use the Consider Null Values for Lookup option to control how rows with null values are matched during lookup. In advanced decision tables, Consider Null Values for Lookup isn't supported. Blank cells in optional input columns always act as wildcards and match any supplied value.
products:
  - Industry Solutions
  - Cross Cloud
release: "264"
---
# How Null Values Work in Decision Tables

How decision tables treat null and blank input cells depends on the table type. In standard decision tables, use the Consider Null Values for Lookup option to control how rows with null values are matched during lookup. In advanced decision tables, Consider Null Values for Lookup isn't supported. Blank cells in optional input columns always act as wildcards and match any supplied value.

### Required Editions

When you turn on **Consider Null Values for Lookup**, rows with null values in the decision table are matched only when the input explicitly includes null, which ensures precise matches. When you turn off this option, a null input returns a match for any value in the column, not just rows with an explicit null.

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small edition"><colgroup><col></colgroup><tbody><tr class=""><td class="slds-cell-wrap" style="vertical-align:top;">Available in: Lightning Experience</td></tr><tr class=""><td class="slds-cell-wrap" style="vertical-align:top;">Available in: <strong>Enterprise</strong>, <strong>Unlimited</strong>, and <strong>Developer</strong> Editions for clouds that have Business Rules Engine enabled</td></tr></tbody></table>

How null and blank input cells affect matching depends on whether you use a standard or an advanced decision table. Review the section for your table type.

## Standard Decision Tables

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-ind-business_rules_engine-264-0-0-production-enus/b2d6dd5c-c231-428b-abbf-3dd2cd51a11f/images/icon_note.png)

Note Decision tables consider null values for the input conditions that are mandatory and have the operator set as Equal.

![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-ind-business_rules_engine-264-0-0-production-enus/b2d6dd5c-c231-428b-abbf-3dd2cd51a11f/images/icon_example.png)

Example Consider the scenario where a decision table has input and output columns per this table:<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
            <colgroup>
              <col style="width:25%">
              <col style="width:25%">
              <col style="width:25%">
              <col style="width:25%">
            </colgroup>
            <thead class="slds-text-title_caps ">
              <tr class="">
                <th scope="colgroup" class="slds-cell-wrap" colspan="3" style="vertical-align:top;" id="d10801e91">INPUT</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d10801e94">OUTPUT</th>
              </tr>
              <tr class="">
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d10801e100">Product</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d10801e103">Payment Type</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d10801e106">Price</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d10801e109">Discount</th>
              </tr>
            </thead>
            <tbody>
              <tr class="">
                <td data-label="Product" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e91 d10801e100 ">A</td>

                <td data-label="Payment Type" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e91 d10801e103 ">one-time</td>

                <td data-label="Price" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e91 d10801e106 ">1000</td>

                <td data-label="Discount" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e94 d10801e109 ">5</td>

              </tr>
              <tr class="">
                <td data-label="Product" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e91 d10801e100 ">B</td>

                <td data-label="Payment Type" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e91 d10801e103 ">null</td>

                <td data-label="Price" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e91 d10801e106 ">500</td>

                <td data-label="Discount" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e94 d10801e109 ">10</td>

              </tr>
              <tr class="">
                <td data-label="Product" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e91 d10801e100 ">B</td>

                <td data-label="Payment Type" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e91 d10801e103 ">one-time</td>

                <td data-label="Price" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e91 d10801e106 ">500</td>

                <td data-label="Discount" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e94 d10801e109 ">15</td>

              </tr>
            </tbody>
          </table>When **Consider Null Values for Lookup** is enabled, the output matches a null input to the explicit null value in the payment type column. When **Consider Null Values for Lookup** is disabled, the output matches a null input to all the values in the payment type column. Here is a table that compares the outputs for when **Consider Null Values for Lookup** is enabled and disabled.

    
| Product | Payment Type | Price | Output with Consider Null Values for Lookup Enabled | Output with Consider Null Values for Lookup Disabled |
| --- | --- | --- | --- | --- |
| A | one-time | 1000 | 5 (first row is an exact match) | 5 (first row is an exact match) |
| B | null | 500 | 10 (second row matches explicit null in input) | 10 and 15 (second and third rows match the product and price columns, and null matches all values in the payment type column) |
| A | null | 1000 | No output values (first row's 'one-time' doesn't match explicit null) | 5 (first row matches the product and price and null matches all payment type values) |
| B | one-time | 500 | 15 (third row is an exact match) | 15 (third row is an exact match) |

## Advanced Decision Tables

**Consider Null Values for Lookup** isn't supported for advanced decision tables. That option applies only to standard decision tables. Advanced decision tables always treat blank cells in _optional_ input columns as wildcards.

Blank optional cells act as wildcards. If an optional input column's cell is blank (null), that condition evaluates to true for any value you supply for that column. The row can still match as long as its mandatory conditions are met.

Wildcards satisfy OR groups. If your condition logic includes an OR group, for example `1 AND 2 AND (3 OR 4)`, a blank wildcard branch in that OR group makes the whole group evaluate to true. The row matches as long as the mandatory, non-OR-group conditions hold.

First Match uses row order, not specificity. When Filter Result By is set to **First Match**, the table evaluates matching rows in table order and returns the first match. It doesn't rank rows by how specific they are, so a wildcard row authored above a more specific row wins. To give a specific row precedence over a wildcard row:

- Place more specific rows above any catch-all or wildcard row.
- Add explicit values to the optional cells on specific rows instead of leaving them blank.
- Put the intentional blank catch-all row last.
- If you apply a Sort By setting, sort so that specific rows precede wildcard rows — sorting changes the row order the table evaluates, so it changes which row wins.

![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-ind-business_rules_engine-264-0-0-production-enus/b2d6dd5c-c231-428b-abbf-3dd2cd51a11f/images/icon_example.png)

Example Consider an advanced decision table with the condition logic `1 AND (2 OR 3)`, where condition 1 (Product) is required, and conditions 2 (Region) and 3 (Tier) are optional.<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
            <colgroup>
              <col style="width:25%">
              <col style="width:25%">
              <col style="width:25%">
              <col style="width:25%">
            </colgroup>
            <thead class="slds-text-title_caps ">
              <tr class="">
                <th scope="colgroup" class="slds-cell-wrap" colspan="3" style="vertical-align:top;" id="d10801e349">INPUT</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d10801e352">OUTPUT</th>
              </tr>
              <tr class="">
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d10801e358">Product (Required)</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d10801e361">Region (Optional)</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d10801e364">Tier (Optional)</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d10801e367">Discount</th>
              </tr>
            </thead>
            <tbody>
              <tr class="">
                <td data-label="Product (Required)" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e349 d10801e358 ">Widget</td>

                <td data-label="Region (Optional)" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e349 d10801e361 ">&nbsp;</td>

                <td data-label="Tier (Optional)" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e349 d10801e364 ">&nbsp;</td>

                <td data-label="Discount" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e352 d10801e367 ">5%</td>

              </tr>
              <tr class="">
                <td data-label="Product (Required)" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e349 d10801e358 ">Widget</td>

                <td data-label="Region (Optional)" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e349 d10801e361 ">West</td>

                <td data-label="Tier (Optional)" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e349 d10801e364 ">Gold</td>

                <td data-label="Discount" class="slds-cell-wrap" style="vertical-align:top;" headers="d10801e352 d10801e367 ">15%</td>

              </tr>
            </tbody>
          </table>With **First Match** selected, an input of Product = Widget, Region = West, and Tier = Gold returns a discount of **5%** from the first row. The blank Region and Tier cells in that row act as wildcards and match any value, so the first row matches before the more specific second row is evaluated. To return 15% for this input, move the second row above the first row, or add explicit values to the first row's Region and Tier cells.

## Null Values vs. Empty Strings in CSV Decision Tables

When you create or edit a decision table by using a CSV file, Business Rules Engine treats empty cells as null. If you add the string "null", it's treated as an invalid value. In case of boolean values, an empty input is treated as false.

Consider a decision table with these CSV rows for the Payment Type column.

  
| Product | Payment Type (cell value in CSV) | How Business Rules Engine Interprets the Value |
| --- | --- | --- |
| A | one-time | Treated as the string `one-time`. |
| B | _(empty cell)_ | Treated as a null value. |
| C | null | Treated as an invalid input. |

![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-ind-business_rules_engine-264-0-0-production-enus/b2d6dd5c-c231-428b-abbf-3dd2cd51a11f/images/icon_important.png)

Important If you have existing CSV uploads with empty strings that you didn't intend as null values, overwrite the CSV to reflect intended behavior.