I don't understand difference between two queries, see images. Attention on last condition. Mysql version is 5.7 What's the magic?
select distinct(pc) as aggregate
from `installers`
where
`success` =1
and
date(created_at) >= '2018-08-15'
and
date(created_at) <= '2018-08-21'
and
(free=0 or free is null)
(free is null or free=0)
select distinct(pc) as aggregate
from `installers`
where
`success` =1
and
date(created_at) >= '2018-08-15'
and
date(created_at) <= '2018-08-21'
and
free!=1
free!=1
Table structure
CREATE TABLE `installers` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`driver_id` BIGINT(20) UNSIGNED NOT NULL,
`created_at` TIMESTAMP NULL DEFAULT NULL,
`updated_at` TIMESTAMP NULL DEFAULT NULL,
`success` TINYINT(4) NULL DEFAULT NULL,
`version` BIGINT(20) UNSIGNED NULL DEFAULT NULL,
`pc` VARCHAR(255) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`status` VARCHAR(180) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`error` VARCHAR(180) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`free` INT(11) NULL DEFAULT NULL,
`time` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
PRIMARY KEY (`id`),
INDEX `installers_created_at_index` (`created_at`),
INDEX `installers_updated_at_index` (`updated_at`),
INDEX `installers_driver_id_foreign` (`driver_id`),
INDEX `installers_success_index` (`success`),
INDEX `installers_version_index` (`version`),
INDEX `installers_pc_index` (`pc`(191)),
INDEX `installers_status_index` (`status`),
INDEX `installers_error_index` (`error`),
INDEX `installers_free_index` (`free`),
INDEX `installers_time_index` (`time`),
CONSTRAINT `installers_driver_id_foreign` FOREIGN KEY (`driver_id`) REFERENCES `drivers` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB
AUTO_INCREMENT=4709971
;
Distinct values of 'free' is NULL,0,1