I could not find any valid example on the internet where I can see the difference between them and why to choose one over the other.
Another way to see it:
chain(iterable1, iterable2, iterable3, ...) is for when you already know what iterables you have, so you can write them as these comma-separated arguments.
chain.from_iterable(iterable) is for when your iterables (like iterable1, iterable2, iterable3) are obtained from another iterable.