<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>article Qlik Analytics: WHERE NOT EXISTS(...)  clause returns only one row for each non-existing value in Official Support Articles</title>
    <link>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Analytics-WHERE-NOT-EXISTS-clause-returns-only-one-row-for/ta-p/1716931</link>
    <description>&lt;P&gt;&lt;BR /&gt;When using &lt;SPAN&gt;WHERE NOT Exists(&amp;lt;fieldName&amp;gt;)&amp;nbsp;&lt;/SPAN&gt;clause in a LOAD statement, the resulting table only contains a single row for each not-existing value of&amp;nbsp;&lt;SPAN&gt;&amp;lt;fieldName&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;For example, consider the following LOAD statements:&lt;/P&gt;
&lt;PRE class="ckeditor_codeblock"&gt;ID_table: 
LOAD * INLINE [
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1
];

Data_table:
LOAD * INLINE [
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID, Value
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1, A
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1, B
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2, C
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2, D
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3, E
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3, F
] WHERE NOT Exists(ID);&lt;/PRE&gt;
&lt;P&gt;&lt;BR /&gt;Expected result of &lt;SPAN&gt;Data_table&lt;/SPAN&gt; after reload should be 4 rows with &lt;SPAN&gt;Value = C, D, E, F&lt;/SPAN&gt;. However, actual result is that only 1 rows with &lt;SPAN&gt;Value = C,E&lt;/SPAN&gt; are returned.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="000070094.png" style="width: 515px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/55407iD0A812444BC8FB63/image-size/large?v=v2&amp;amp;px=999" role="button" title="000070094.png" alt="000070094.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Environment:&lt;/STRONG&gt;&lt;/U&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;LI-PRODUCT title="Qlik Sense Enterprise on Windows" id="qlikSenseEnterpriseWindows"&gt;&lt;/LI-PRODUCT&gt;&amp;nbsp;, all versions&lt;/LI&gt;
&lt;LI&gt;&lt;LI-PRODUCT title="QlikView" id="qlikView"&gt;&lt;/LI-PRODUCT&gt;&amp;nbsp;, all versions&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3 class="qlik-migrated-tkb-headings"&gt;Resolution:&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This behavior is actually working as designed and is a common misconception - &lt;SPAN&gt;Where Not Exists&lt;/SPAN&gt; is not exactly opposite with &lt;SPAN&gt;Where Exists&lt;/SPAN&gt;&amp;nbsp;in QlikView and Qlik Sense. The behavior is due to the line-by-line processing mechanism of Qlik engine. For example, in the above load statement:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;When loading line 3 (&lt;I&gt;2, C&lt;/I&gt;), ID = 2 is not yet loaded before (i.e there is no match&amp;nbsp; for this value in the in-memory symbol table for field "ID").&amp;nbsp;&lt;SPAN&gt;WHERE NOT Exists(ID)&lt;/SPAN&gt;&lt;I&gt;&amp;nbsp;&lt;/I&gt;therefore returns TRUE, and this line is loaded&lt;/LI&gt;
&lt;LI&gt;After loading this line,&amp;nbsp;value 2 is also written to the symbol table for field "ID"&lt;/LI&gt;
&lt;LI&gt;When it comes to line 4 (&lt;I&gt;2, D&lt;/I&gt;), ID = 2 already exists in the symbol table as a result of step (2) above.&lt;SPAN&gt;&amp;nbsp;WHERE NOT Exists(ID)&amp;nbsp;&lt;/SPAN&gt;now returns FALSE, therefore&amp;nbsp;this line is not loaded.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;The following blog post explains the behavior with a demonstration video:&amp;nbsp;&lt;A href="https://qlikcentral.com/2016/01/21/the-problem-with-where-not-exists/" target="_blank" rel="noopener"&gt;The Problem with Where Not Exists&lt;/A&gt;. Also refer to article&amp;nbsp;&lt;A href="https://community.qlik.com/t5/Knowledge-Base/How-Is-Data-Stored-In-Qlik-Sense-And-QlikView/ta-p/1712436" target="_blank" rel="noopener"&gt;How Is Data Stored In Qlik Sense And QlikView?&lt;/A&gt;&amp;nbsp;for a discussion of how Qlik engine stores data in memory&lt;BR /&gt;&lt;BR /&gt;The solution in this case is to rename the original ID field (for example ID1) and use&amp;nbsp;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;WHERE&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;NOT&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;Exists&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;ID1&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;ID&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;instead. With this implementation, ID and ID1 are different fields, so they have different symbol tables and is not affected by the on-the-run update of the symbol table as shown above.&lt;/P&gt;
&lt;PRE class="ckeditor_codeblock"&gt;ID_table: 
&lt;STRONG&gt;LOAD ID as ID1;&lt;/STRONG&gt;
LOAD * INLINE [
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1
];

Data_table:
LOAD * INLINE [
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID, Value
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1, A
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1, B
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2, C
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2, D
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3, E
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3, F
] WHERE NOT Exists(ID1, ID);&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 12 Jan 2026 11:54:35 GMT</pubDate>
    <dc:creator>Sonja_Bauernfeind</dc:creator>
    <dc:date>2026-01-12T11:54:35Z</dc:date>
    <item>
      <title>Qlik Analytics: WHERE NOT EXISTS(...)  clause returns only one row for each non-existing value</title>
      <link>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Analytics-WHERE-NOT-EXISTS-clause-returns-only-one-row-for/ta-p/1716931</link>
      <description>&lt;P&gt;&lt;BR /&gt;When using &lt;SPAN&gt;WHERE NOT Exists(&amp;lt;fieldName&amp;gt;)&amp;nbsp;&lt;/SPAN&gt;clause in a LOAD statement, the resulting table only contains a single row for each not-existing value of&amp;nbsp;&lt;SPAN&gt;&amp;lt;fieldName&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;For example, consider the following LOAD statements:&lt;/P&gt;
&lt;PRE class="ckeditor_codeblock"&gt;ID_table: 
LOAD * INLINE [
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1
];

Data_table:
LOAD * INLINE [
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID, Value
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1, A
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1, B
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2, C
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2, D
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3, E
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3, F
] WHERE NOT Exists(ID);&lt;/PRE&gt;
&lt;P&gt;&lt;BR /&gt;Expected result of &lt;SPAN&gt;Data_table&lt;/SPAN&gt; after reload should be 4 rows with &lt;SPAN&gt;Value = C, D, E, F&lt;/SPAN&gt;. However, actual result is that only 1 rows with &lt;SPAN&gt;Value = C,E&lt;/SPAN&gt; are returned.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="000070094.png" style="width: 515px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/55407iD0A812444BC8FB63/image-size/large?v=v2&amp;amp;px=999" role="button" title="000070094.png" alt="000070094.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Environment:&lt;/STRONG&gt;&lt;/U&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;LI-PRODUCT title="Qlik Sense Enterprise on Windows" id="qlikSenseEnterpriseWindows"&gt;&lt;/LI-PRODUCT&gt;&amp;nbsp;, all versions&lt;/LI&gt;
&lt;LI&gt;&lt;LI-PRODUCT title="QlikView" id="qlikView"&gt;&lt;/LI-PRODUCT&gt;&amp;nbsp;, all versions&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3 class="qlik-migrated-tkb-headings"&gt;Resolution:&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This behavior is actually working as designed and is a common misconception - &lt;SPAN&gt;Where Not Exists&lt;/SPAN&gt; is not exactly opposite with &lt;SPAN&gt;Where Exists&lt;/SPAN&gt;&amp;nbsp;in QlikView and Qlik Sense. The behavior is due to the line-by-line processing mechanism of Qlik engine. For example, in the above load statement:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;When loading line 3 (&lt;I&gt;2, C&lt;/I&gt;), ID = 2 is not yet loaded before (i.e there is no match&amp;nbsp; for this value in the in-memory symbol table for field "ID").&amp;nbsp;&lt;SPAN&gt;WHERE NOT Exists(ID)&lt;/SPAN&gt;&lt;I&gt;&amp;nbsp;&lt;/I&gt;therefore returns TRUE, and this line is loaded&lt;/LI&gt;
&lt;LI&gt;After loading this line,&amp;nbsp;value 2 is also written to the symbol table for field "ID"&lt;/LI&gt;
&lt;LI&gt;When it comes to line 4 (&lt;I&gt;2, D&lt;/I&gt;), ID = 2 already exists in the symbol table as a result of step (2) above.&lt;SPAN&gt;&amp;nbsp;WHERE NOT Exists(ID)&amp;nbsp;&lt;/SPAN&gt;now returns FALSE, therefore&amp;nbsp;this line is not loaded.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;The following blog post explains the behavior with a demonstration video:&amp;nbsp;&lt;A href="https://qlikcentral.com/2016/01/21/the-problem-with-where-not-exists/" target="_blank" rel="noopener"&gt;The Problem with Where Not Exists&lt;/A&gt;. Also refer to article&amp;nbsp;&lt;A href="https://community.qlik.com/t5/Knowledge-Base/How-Is-Data-Stored-In-Qlik-Sense-And-QlikView/ta-p/1712436" target="_blank" rel="noopener"&gt;How Is Data Stored In Qlik Sense And QlikView?&lt;/A&gt;&amp;nbsp;for a discussion of how Qlik engine stores data in memory&lt;BR /&gt;&lt;BR /&gt;The solution in this case is to rename the original ID field (for example ID1) and use&amp;nbsp;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;WHERE&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;NOT&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;Exists&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;ID1&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;ID&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;instead. With this implementation, ID and ID1 are different fields, so they have different symbol tables and is not affected by the on-the-run update of the symbol table as shown above.&lt;/P&gt;
&lt;PRE class="ckeditor_codeblock"&gt;ID_table: 
&lt;STRONG&gt;LOAD ID as ID1;&lt;/STRONG&gt;
LOAD * INLINE [
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1
];

Data_table:
LOAD * INLINE [
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID, Value
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1, A
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1, B
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2, C
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2, D
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3, E
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3, F
] WHERE NOT Exists(ID1, ID);&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 12 Jan 2026 11:54:35 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Analytics-WHERE-NOT-EXISTS-clause-returns-only-one-row-for/ta-p/1716931</guid>
      <dc:creator>Sonja_Bauernfeind</dc:creator>
      <dc:date>2026-01-12T11:54:35Z</dc:date>
    </item>
    <item>
      <title>Re: WHERE NOT EXISTS(...)  clause returns only one row for each non-existing value</title>
      <link>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Analytics-WHERE-NOT-EXISTS-clause-returns-only-one-row-for/tac-p/1856980#M4744</link>
      <description>&lt;P&gt;But if I do this&amp;nbsp;&lt;/P&gt;
&lt;PRE class="ckeditor_codeblock"&gt;WHERE NOT Exists(ID1, ID)&lt;/PRE&gt;
&lt;P&gt;I lose my qvd load optimized &lt;span class="lia-unicode-emoji" title=":crying_face:"&gt;😢&lt;/span&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 09 Nov 2021 09:39:22 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Analytics-WHERE-NOT-EXISTS-clause-returns-only-one-row-for/tac-p/1856980#M4744</guid>
      <dc:creator>axnvazquez</dc:creator>
      <dc:date>2021-11-09T09:39:22Z</dc:date>
    </item>
  </channel>
</rss>

