title: includes with where clause in ActiveRecord
body: <p>I would like to preload associations but if no associations exist I would like to return the main relation.</p>
  
  <p>To understand my issue here is a reproducible script :</p>
  
  <pre><code># frozen_string_literal: true
  gem 'rails'
  require 'active_record'
  
  puts "Active Record #{ActiveRecord::VERSION::STRING}"
  
  ActiveRecord::Base.establish_connection(
    adapter: 'sqlite3',
    database: ':memory:'
  )
  
  ActiveRecord::Schema.define do
    create_table :organisations, force: true do |t|
      t.string 'name', limit: 255, null: false
      t.datetime 'created_at'
      t.datetime 'updated_at'
    end
  
    create_table :groups, force: true do |t|
      t.string 'name', limit: 255, null: false
      t.integer 'shop_id', null: false
      t.datetime 'created_at'
      t.datetime 'updated_at'
    end
  
    create_table :groups_organisations, force: true do |t|
      t.integer  'organisation_id', null: false
      t.integer  'group_id', null: false
      t.datetime 'created_at'
      t.datetime 'updated_at'
    end
  end
  
  class Organisation &lt; ActiveRecord::Base
    has_many :groups_organisations
    has_many :groups, through: :groups_organisations
  end
  
  class Group &lt; ActiveRecord::Base
    has_many :groups_organisations
    has_many :organisation, through: :groups_organisations
  end
  
  class GroupsOrganisation &lt; ActiveRecord::Base
    belongs_to :group
    belongs_to :organisation
  end
  
  organisation_without_groups = Organisation.create!(name: 'my organisation without groups')
  group_1 = Group.create!(name: 'group_1', shop_id: 1)
  group_2 = Group.create!(name: 'group_2', shop_id: 2)
  organisation_with_groups = Organisation.create!(name: 'my organisation with groups', groups: [group_1, group_2])
  </code></pre>
  
  <p>When I don't have records to include</p>
  
  <pre><code>p Organisation.where(name: 'my organisation without groups').includes(:groups).where(groups: { shop_id: 1 })
  # &lt;ActiveRecord::Relation []&gt;
  </code></pre>
  
  <p>When I have records to include</p>
  
  <pre><code>p Organisation.where(name: 'my organisation with groups').includes(:groups).where(groups: { shop_id: 1 })
  # &lt;ActiveRecord::Relation [#&lt;Organisation id: 2, name: "my organisation with groups", created_at: "2017-07-21 09:45:07", updated_at: "2017-07-21 09:45:07"&gt;]&gt;
  </code></pre>
  
  <p>The SQL I get is</p>
  
  <pre><code>puts Organisation.where(name: 'my organisation witReproduce the actual bug!hout groups').includes(:groups).where(groups: { shop_id: 1 }).to_sql
  </code></pre>
  
  <p>Where clause is performed on all the query not on the LEFT OUTER JOIN</p>
  
  <pre><code>SELECT "organisations"."id" AS t0_r0,
         "organisations"."name" AS t0_r1,
         "organisations"."created_at" AS t0_r2,
         "organisations"."updated_at" AS t0_r3,
         "groups"."id" AS t1_r0,
         "groups"."name" AS t1_r1,
         "groups"."shop_id" AS t1_r2,
         "groups"."created_at" AS t1_r3,
         "groups"."updated_at" AS t1_r4
  FROM "organisations"
  LEFT OUTER JOIN "groups_organisations" 
               ON "groups_organisations"."organisation_id" = "organisations"."id"
  LEFT OUTER JOIN "groups" 
               ON "groups"."id" = "groups_organisations"."group_id"
  WHERE "organisations"."name" = 'my organisation without groups'
    AND "groups"."shop_id" = 1
  </code></pre>
  
  <p>What I would like is</p>
  
  <pre><code>LEFT OUTER JOIN "groups" 
               ON "groups"."id" = "groups_organisations"."group_id"
              AND groups.store_id = 20441
  WHERE "organisations"."name" = 'my organisation without groups'
  </code></pre>
  
  <p>Is it possible to preload using LEFT OUTER JOIN with conditionals?</p>