Hi Guys,
I did the Instantiation of the “smoke” as Instantiate (smoke, this.transform.position, Quaternion.identity), but as I see in the course, ben did it as Instantiate (smoke, gameObject.transform.position, Quaternion.identity).
Both of them work perfectly, but I would like to know what is the difference behind this definition. If I have things clear, “this.” may refer to the actual instance of the class (Brick in the case), while gameObject makes reference to the gameObject itself, which at the same time includes the script where the class is defined (and thus posessing the same transform.position).
So could someone explain me please what is the real difference between using one or the other and why should be better to use “gameObject” instead of “this” in a general situation? Moreover, could someone give me a brief example of where “this” and “gameObject” could represent a different behaviour? Thanks in advance guys.

You have it right, “this” refers to the instance of the MonoBehaviour, while gameObject refers to the GameObject this MonoBehaviour is attached to.
The clearest example I can think of where there is a difference between the two is Destroy(this) vs. Destroy(gameObject).
Destroy(this) will remove the MonoBehaviour script from the GameObject.
Destroy(gameObject) will remove the GameObject the script is attached to from the scene.
There are other differences, like some functions and variables that are accessible from gameObject but not “this” (e.g. SetActive or AddComponent), or vice-versa. But for the most part, they behave the same (somewhat confusingly sometimes in my opinion).
I prefer using gameObject most times, because that’s usually what we’re actually referring to. In the case of the position, we think of the position of the GameObject. The only drawback I’m aware of is that it’s longer to write, but if there are any others, I’d be happy to learn about them 
That’s very clarifying explanation, thanks a lot sebastian, 