Attention, quand on fait une jointure "implicite" (dans la clause WHERE et sans utiliser de clause JOIN) on utilise l'équivalent d'un INNER JOIN (c'est strictement équivalent, aussi bien en terme de résultat que de performance pour peu que la condition sur la clé étrangère soit avant le reste).
L'avantage d'utiliser les jointures explicites, c'est de pouvoir faire des LEFT JOIN. La différence entre les deux c'est qu'un INNER JOIN ne renvoie pas de ligne s'il n'y a pas de relation, alors que le LEFT JOIN renvoie une ligne avec des champs NULL sur la table de droite s'il n'y a pas de relation (RIGHT JOIN en est le symétrique).
Dans le cas d'une relation 1 - 0..1, il est vital d'utiliser des LEFT JOIN, utiliser INNER JOIN (ou la clause WHERE) est une erreur de conception dans ce cas (c'est d'ailleurs un défaut que Propel a bien du mal à corriger, mais j'ai proposé un patch pour Symfony, si ça tente ceux qui s'y intéressent voir le plugin nahoPropelOptimizerPlugin )
L'avantage d'utiliser les jointures explicites, c'est de pouvoir faire des LEFT JOIN. La différence entre les deux c'est qu'un INNER JOIN ne renvoie pas de ligne s'il n'y a pas de relation, alors que le LEFT JOIN renvoie une ligne avec des champs NULL sur la table de droite s'il n'y a pas de relation (RIGHT JOIN en est le symétrique).
Dans le cas d'une relation 1 - 0..1, il est vital d'utiliser des LEFT JOIN, utiliser INNER JOIN (ou la clause WHERE) est une erreur de conception dans ce cas (c'est d'ailleurs un défaut que Propel a bien du mal à corriger, mais j'ai proposé un patch pour Symfony, si ça tente ceux qui s'y intéressent voir le plugin nahoPropelOptimizerPlugin )
Ressources [PHP][MySQL][prototype.js]