No, it won’t. Database will return a table where games and users tables are joined, and then Ecto will group them up by games.id and users will be accumulated into users field (thats how preload works in Ecto)
I’ve tested it out in sample project and something like this was returned. Users 1 to 5 were playing in games from 1 to 5 and users 6, 7 and 99 joined the game 5 too.
[
%Welp.Game{
__meta__: #Ecto.Schema.Metadata<:loaded, "games">,
id: 1,
users: [
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 1,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 2,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 3,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 4,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 5,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
}
]
},
%Welp.Game{
__meta__: #Ecto.Schema.Metadata<:loaded, "games">,
id: 2,
users: [
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 1,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 2,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 3,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 4,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 5,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
}
]
},
%Welp.Game{
__meta__: #Ecto.Schema.Metadata<:loaded, "games">,
id: 3,
users: [
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 1,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 2,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 3,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 4,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 5,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
}
]
},
%Welp.Game{
__meta__: #Ecto.Schema.Metadata<:loaded, "games">,
id: 4,
users: [
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 1,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 2,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 3,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 4,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 5,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
}
]
},
%Welp.Game{
__meta__: #Ecto.Schema.Metadata<:loaded, "games">,
id: 5,
users: [
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 1,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 2,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 3,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 4,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 5,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 6,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 7,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
},
%Welp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
id: 99,
games: #Ecto.Association.NotLoaded<association :games is not loaded>
}
]
}
]
Exactly right, I did it for readability.