Hi Tara - one way would be to create a smart list for leads eligible for updating the status to MQL. If the Status has already been updated to SQL via sales, exclude them from eligible criteria. Similarly, if the status was changed to SQL in past weeks, exclude them from criteria. Later, you can reference that eligible smart list in the choice as a member of smart list is eligible, for updating the status to MQL.
It might be better to enable a skip stage in your RCM (if you use it) and have a proper campaign to look for anyone who comes in and skips to SQL.
And you could set the flow to force them to go through MQL, but that's not really necessary.
This is best to be controlled in the lead life cycle and this is a pretty common use case. You had a new lead and they belong in the SQL stage upon creation. You can set up the Marketo Program that controls the lead lifecycle to automatically push this lead through all the appropriate gates so they will be counted in MQL and land in SQL.
You can also write logic in there that will prevent someone in SQL that comes through chat or any other source that is already in SQL to go back to MQL. Its actually not excluding these edge cases but rather accounting for people flowing in one direction. Life cycle is a pretty complex beast so if you haven't done it, I do not recommend trying this on your own. Steve Susina gave a great talk on this at Summit this year.