Ответ 1
Первые два запроса эквивалентны; в мире MySql используется ключевое слово using (ну, почти - см. документация, но использование является частью спецификации Sql2003 и есть некоторые отличия в NULL значения) так же, как и выражение field1.id = field2.id
Вы можете легко написать их как:
SELECT field1, field2
FROM table1
INNER JOIN table2 ON (table1.id = table2.id)
Третий запрос - LEFT JOIN. Это выберет все соответствующие строки в обеих таблицах, а также вернет все строки в таблице1, которые не имеют совпадений в таблице2. Для этих строк столбцы в таблице 2 будут представлены значениями NULL.
Мне нравится Jeff Atwood визуальное объяснение этих
Теперь, к тому, что лучше или хуже. Ответ: зависит. Они для разных вещей. Если в таблице 1 больше строк, чем в таблице2, то левое соединение возвращает больше строк, чем внутреннее соединение. Но производительность запросов будет производиться многими факторами, такими как размер таблицы, типы столбца, что делает база данных одновременно.
Ваша первая проблема заключается в том, чтобы использовать запрос, необходимый для получения данных. Вы могли бы честно узнать, какие строки в таблице1 не соответствуют таблице2; в этом случае вы использовали бы ЛЕВЫЙ ПРИСОЕДИНЕНИЕ. Или вам могут потребоваться только строки, которые соответствуют - INNER JOIN.
Как указывает Кристер, вы можете использовать ключевое слово EXPLAIN, чтобы рассказать вам, как база данных будет выполнять каждый вид запроса. Это очень полезно при попытке выяснить, почему запрос медленный, так как вы можете видеть, где база данных проводит все свое время.