title: Is SQL IN is not the opposite of NOT IN?
body: <p>Let say I have 3 tables to store different type of users</p>
  
  <p>table 1 : all users, primary key id</p>
  
  <p>table 2 : admin users, primary key id, connect to table 1 via user_id</p>
  
  <p>table 3 : normal users, primary key id, connect to table 1 via user_id</p>
  
  <p>and any user can only be one type of the user, which mean user_id in table 2 and table 3 will not clash.</p>
  
  <p>number of records :</p>
  
  <p>table 1 : 100</p>
  
  <p>table 2 : 30</p>
  
  <p>table 3 : 70</p>
  
  <pre><code>SELECT * FROM `table_1`
  WHERE `id` IN (
      SELECT `user_id` 
          FROM `table_2`
  )
  </code></pre>
  
  <p>This one return me 30 rows which is correct.</p>
  
  <p>However,</p>
  
  <pre><code>SELECT * FROM `table_1`
  WHERE `id` NOT IN (
      SELECT `user_id` 
          FROM `table_2`
  )
  </code></pre>
  
  <p>return me 0. </p>
  
  <p>I expect to get 70. </p>
  
  <p>Why is this happening? </p>
  
  <p>Is there any error in my query?</p>
  
  <p>Thank you</p>