La raison pour laquelle il ne renvoie aucune ligne est que vous effectuez un regroupement sur une valeur dans table_1. Puisqu'il n'y a pas de valeurs dans table_1, il n'y a pas de lignes à renvoyer. En d'autres termes, si vous renvoyez t1.any_col dans votre requête à partir du GROUP BY comme suit :
SELECT `t1`.`any_col`, COUNT(`t2`.`name`)
FROM `table_1` `t1`
LEFT JOIN `table_2` `t2` ON `t1`.`key_id` = `t2`.`key_id`
WHERE `t1`.`another_column` = 123
GROUP BY `t1`.`any_col`
Qu'est-ce qui s'afficherait pour t1.any_col s'il n'y avait pas de lignes ? La seule façon d'obtenir ce que vous voulez est d'unir vos résultats avec une autre requête qui ne vérifie aucune ligne dans table_1. Dans cet exemple, j'utilise la vue INFORMATION_SCHEMA simplement pour avoir quelque chose sur lequel je peux interroger.
SELECT COUNT(`t2`.`name`)
FROM `table_1` `t1`
LEFT JOIN `table_2` `t2` ON `t1`.`key_id` = `t2`.`key_id`
WHERE `t1`.`another_column` = 123
GROUP BY `t1`.`any_col`
UNION ALL
SELECT 0
FROM INFORMATION_SCHEMA.TABLES
Where Not Exists( Select 1 From `table_1` )
LIMIT 1