Когда Вы пишите from table1, table2 where...
sql сначала строит декартово произведение матриц (размером count(table1)*count(table2)), а затем получившуюся огромную таблицу фильтрует.
Когда вы пишите join - sql делает фильтрацию на стадии построения декартова произведения, что существенно ускоряет процесс и уменьшает потребление памяти на запрос.
В случае если в какой то из таблиц сильно меньше релевантных записей ( к примеру у нас в базе 1 000 000 пользователей, но всего 10 000 городов) или одна из таблиц не нужна для фильтрации всего запроса (например мы ищем пользователей-женщин без учета города проживания) будет сильно быстрее убрать 2ю таблицу из запроса вообще, получив в первом запросе данные из таблицы users, выбрав на ЯП нужные id и сформировав 2й запрос в базу для получения городов.
select ... from users where user.sex = 0;
select ... from city where city_id in (...)
Imho использование from table1,table2 это признак профнепригодности (к слову как и sql_calc_found_rows хотя это к делу не относится)