Powodem, dla którego zwraca zero wierszy, jest to, że grupujesz według wartości w table_1. Ponieważ w table_1 nie ma żadnych wartości, nie ma wierszy do zwrócenia. Mówiąc inaczej, jeśli zwróciłeś t1.any_col w zapytaniu z funkcji GROUP BY w ten sposób:
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`
Co wyświetliłoby się dla t1.any_col, gdyby nie było wierszy? Jedynym sposobem na osiągnięcie tego, co chcesz, jest połączenie wyników z innym zapytaniem, które sprawdza, czy w tabeli_1 nie ma wierszy. W tym przykładzie używam widoku INFORMATION_SCHEMA po prostu po to, aby uzyskać coś, o co mogę zapytać.
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