Pregunta complicada de responder a priori, depende muchos factores. En principio con pocos datos es poco probable que se noten problemas de performance en cualquiera de las dos (2) consultas, pero, a medida que la cantidad de registros en la tabla aumente, es cuando se deberán iniciar las estrategias de optimización.
Aprovecho este menaje para agregar la consulta del
SQL Fiddle.
Código SQL:
Ver originalSET @`ven_a` := 'diciembre',
@`ven_b` := 'noviembre';
SET @`des_a` := CONCAT('ventas_', @`ven_a`),
@`des_b` := CONCAT('ventas_', @`ven_b`);
SET @`qry` := CONCAT('SELECT
`der`.`cedula`,
`der`.`ventas_a` `', @`des_a`, '`,
`der`.`ventas_b` `', @`des_b`, '`,
(`der`.`ventas_a` - `der`.`ventas_b`) `diferencia`
FROM
(
SELECT
`ven_a`.`cedula`,
`ven_a`.`cantidad_ventas` `ventas_a`,
`ven_b`.`cantidad_ventas` `ventas_b`
FROM `ventas` `ven_a`
INNER JOIN `ventas` `ven_b` ON `ven_a`.`cedula` = `ven_b`. `cedula` AND `ven_b`.`mes_ventas` = \'', @`ven_b`, '\'
WHERE `ven_a`.`mes_ventas` = \'', @`ven_a`, '\'
) `der`;');
PREPARE `stmt` FROM @`qry`;
EXECUTE `stmt`;
DEALLOCATE PREPARE `stmt`;