So, both types of transactions can coexists in Segwit nodes mempool at the same time? They are then broadcasted to other nodes as is?
Yes.
Just one more question: once a Segwit node receives a non-Segwit transaction, are there instructions like "if Segwit do this || if non-Segwit do that" in order to put it in the mempool?
No. The verification processes are basically the same, but for segwit transactions, there are a few extra steps prior to main validation to check that a transaction that spends from witness transactions has a txwitness field and the marker and flag bytes.
The same reasoning apply to blocks sent from non-Segwit to Segwit nodes? I ask cause, when sending from a Segwit node, there are instructions that orientate the "block type" to be broadcasted accordingly to the destiny (Segwit or Legacy), as shown bellow:
if (inv.type == MSG_BLOCK)
connman.PushMessageWithFlag(pfrom, SERIALIZE_TRANSACTION_NO_WITNESS, NetMsgType::BLOCK, block);
else if (inv.type == MSG_WITNESS_BLOCK)
connman.PushMessage(pfrom, NetMsgType::BLOCK, block);
Thanks again
No. The block format is not different with segwit. The only thing different is that any transactions spending segwit outputs must be in the witness extended format (the format with marker and flag bytes and txwitness field). But the block format itself is not different.