Si lo que está escribiendo es un procedimiento, debe probar:
BEGIN
IF ((SELECT COUNT(id) FROM tbl_states) > 0) THEN
SELECT * FROM tbl_cities;
END IF
END
Si es una consulta, BEGIN
y END
no tienes nada que hacer aquí.
Editar
Bueno, realmente no hay más que decir, IF ((SELECT COUNT(id) FROM tbl_states) > 0) THEN SELECT * FROM tbl_cities; END IF
simplemente no respeta la declaración MySQL básica SELECT
.
Debes comenzar con SELECT
... etc...