Tiene que ver con los JOINs y son muy necesarias para extraer ciertos Tipos de Datos.

Son los elementos que se encuentran en una Tabla pero que NO se encuentran en otra.

CURSO

Primero vamos a visualizar nuestra Data, cuantos alumnos hay por carreras.

SELECT carrera_id, COUNT(*) AS Cuenta
FROM platzi.alumnos
GROUP BY carrera_id
ORDER BY Cuenta DESC;

Como nuestras dos tablas (Alumnos y Carreras) están bien hechas, donde todos los alumnos tienen un Carrera_id de una Carrera que, si existe, entonces para poder hacer este ejercicio de Diferencias vamos a eliminar los registros entre 30 y 40.

DELETE FROM platzi.carreras
WHERE id BETWEEN 30 AND 40;

Ahora quiero ver los alumnos que se quedaron sin carrera:

SELECT  a.nombre,
				a.apellido,
				a.carrera_id,
				c.id,
				c.carrera
FROM 	platzi.alumnos AS a
	LEFT JOIN platzi.carreras AS c
	ON a.carrera_id = c.id
WHERE c.id IS NULL
ORDER BY a.carrera_id;

RETO

Seleccionar sin excluir gente, alumnos y carreras, incluyendo alumnos sin carrera y carreras sin alumnos:

SELECT  a.nombre,
		a.apellido,
		a.carrera_id,
		c.id,
		c.carrera
FROM 	platzi.alumnos AS a
	FULL OUTER JOIN platzi.carreras AS c
	ON a.carrera_id = c.id
ORDER BY a.carrera_id DESC;
SELECT  CONCAT (a.nombre, ' ', a.apellido) AS Alumno,
				a.carrera_id,
				c.id,
				c.carrera
FROM 	platzi.alumnos AS a
	LEFT JOIN platzi.carreras AS c
	ON a.carrera_id = c.id;