El delimitador predeterminado de Mysql es ;
que se usa para una declaración en la línea de comando, algo como
select * from users ;
Cuando escribe un disparador o un procedimiento almacenado para ejecutar el código completo, mysql necesita entender que es un bloque de código/consulta.
Si no se proporciona ningún delimitador, cuando mysql encuentre cualquier ;
dentro del procedimiento de almacenamiento o disparador, lo pensará como una declaración e intentará ejecutarlo. Por lo tanto, debemos proporcionar un delimitador para el procedimiento de almacenamiento o desencadenador y hacer que mysql entienda que cualquier cosa dentro de ese delimitador es un conjunto completo de código.
Así que en tu ejemplo
SELECT * FROM products;
será parte de la declaración completa cuando haya un delimitador que no sea ;
se proporciona al principio.