Une commande aurait toujours un client, non ? Il ne s'agit donc pas d'une jointure gauche mais d'une jointure interne.
Ce qui les relie est le customer_id. Donc, votre SQL est simplement :
select o.order_number, o.customer_ID, o.address,
c.first_name, c.last_name
from orders o
inner join customer c on o.customer_ID = c.customer_ID;
Relation d'entité :
Commande ClientCustomer_Id 0...N>---+ 1 Customer_Id... ...
Cette relation EF provient de l'exemple de base de données MS SQL Server Northwind. Dans cet exemple de base de données, tout comme la vôtre, il y a des clients et des commandes. Les tables Customers et Orders sont liées via les champs CustomerId dans les deux tables (il s'agit de la clé primaire dans Customers et de la clé étrangère dans la table Orders). Lorsque vous modélisez cela en tant que relation d'entité, vous avez le diagramme ci-dessus. L'entité client a une propriété de navigation "Orders" (via customerId) qui pointe vers les commandes d'un client particulier. Et l'entité Order a une propriété de navigation qui pointe vers son Customer (toujours via CustomerId). La relation est de 1 à 0 ou plusieurs (1 - *), ce qui signifie qu'un client peut avoir 0 ou plusieurs commandes.
Lorsque vous effectuez la jointure du côté du client, vous utilisez une jointure GAUCHE "si vous voulez voir tous les clients, qu'ils aient ou non une ou plusieurs commandes" - 0 ou plusieurs commandes. Si vous voulez voir uniquement ceux avec Order(s), vous utilisez une jointure interne.
Lorsque vous effectuez la jointure du côté des commandes, une commande doit avoir un client, il ne peut donc pas s'agir d'une jointure GAUCHE. C'est une jointure INNER.
Vous pouvez vérifier la relation des deux côtés à l'aide du champ CustomerId de connexion.
Vous n'auriez pas de table séparée pour "OrderId, CustomerId" car il ne s'agit pas d'une relation plusieurs à plusieurs (ce serait une pure redondance et créerait des anomalies de normalisation).
J'espère que c'est plus clair maintenant.